C++ 学习日记day01

来源:互联网 发布:mac鼠标怎么连接 编辑:程序博客网 时间:2024/06/05 15:52
C++语言程序设计
语法(6)
  C++概述:从C到C++的过渡
  类和对象
  运算符重载
  继承和多态
  异常和I/O流
数据结构和算法(3)
  堆栈、队列、链表、二叉树
  排序和查询算法
模板和STL(3)
  C++的模板
  STL标准模板库的容器类和泛型算法
第一课
1.C++简介
1.1发展简史
发明人:Bjarne Stroustrup,本贾尼.斯特劳斯特鲁普,C++之父。
1979,C++语言诞生在Bell实验室。
1983,第一个商业C++编译器版本。
1987,第一个GNU C++编译器。
1990,第一个Borland C++编译器。
1992,第一个Microsoft C++编译器。
1998,第一个C++ ISO标准,C++98,目前大多数编译器支持。
2003,做过修订。
2011,ISO/IEC 14882:2011,最新的C++国际标准,目前只有少数编译器支持。
1.2 C++和C
C++包含整个C,C是建立C++的基础。二者的区别:
1) C++的类型检查更严格;
2) C++比C更丰富:
   数据类型多,bool、引用、enum
   支持面向对象(OO),类、继承、多态
   支持运算符重载
   支持异常
   泛型编程,模板
3) C++比C更好用
   代码更简练
2. 第一个C++程序
1) 编译器g++
2) 源文件的扩展名.cpp/.C/.cxx/.cc
3) 头文件#include <iostream>
4) 使用了名字空间std
5) cout<<输出,cin>>输入
6) 变量声明随用随声明
3. 名字空间
namespace 名字空间名 {
    名字声明;
}
名字空间指令
using namespace 名字空间名;
名字空间声明
using 名字空间名::名字;
4. C++中的结构、联合和枚举
1) 结构
A. 使用结构定义变量可以省略struct关键字
C:
struct Student {
    char name[128];
    int age;
};
struct Student s = {"zhangfei", 22};
C++:
Student s = {"zhangfei", 22};
B. C++的结构里面可以定义函数
2) 联合
union UN {
    int n;
    char c[4];
};
A. 使用联合定义变量可以省略union关键字
B. 不定义变量,直接访问联合的成员
3) 枚举
在C++中enum是一个独立的数据类型,而不象在C中仅仅是整数。
5. 布尔类型bool
取值只有两个true/false
6. 引用类型
1) 引用就是一个变量的别名。
int n = 10;
int& r = n;
r = 20;
int* p;
p = &n;
2) 引用必须在声明的同时初始化。
// int& r;
// r = n;
3) 引用一旦初始化,就不能再成为另一个变量的引用。
int n = 10;
int& r = n;
int m = 20;
r = m; // n == 20
4) 不能有空引用。
int* p = NULL;
int a[10];
char* pa[10];
int& r[10]; // 错误
5) 不能声明引用型数组
6) 一般引用型变量不能引用常量,除非是const型引用。
int& r = 10; // 错误
const int& r = 10; // 正确
r = 20; // 报错
int* p = (int*)malloc (10*sizeof (int));
p[0] = 100;
free (p);
p = NULL;
if (p) {
    p[0] = 100;
}
7. C++运算符转换
&& and
|| or
!  not
&  bitand
|  bitor
~  compl
^  xor
8. C++的函数
1) 重载
在同一作用域中,函数名相同,形参表不同的函数可以有多个,他们构成重载关系。
重载匹配的原则:完全匹配>常量转换>升级转换>标准转换>自定义转换>省略匹配
add_int_int
add_double_double
C++换名
add
extern "C" {
   void foo (int n, char c) {...} // foo
}
2) 缺省参数
A. 如果函数的参数表中某一个形参具有缺省值,那么其右的所有参数都必须有缺省值。
B. 注意避免和重载发生冲突。
C. 当函数的定义和声明分开的时候,缺省参数只能出现在函数声明部分。
3) 哑元
void JPEG2BMP (int n) {...}; // V1.0
void JPEG2BMP (int) {...}; // V2.0
JPEG2BMP (20);
i++;
++i;
operator++
operator++ (int)
哑元是一种没有参数名的参数,主要是为了函数的区别和向前兼容。
4) 内联函数
A. 可以在获得函数调用的优势(计算实参表达式、类型检查等)的同时,提供接近与宏的性能。
B. inline关键字可以将一个函数声明为内联,但是inline只是建议。编译器未必真的将其处理为内联。
复杂函数不适合做内联。
递归函数不能做内联。
void foo (void) {
   if (...)
        foo ();
}
C. 隐式内联和显示内联
通过inline关键字声明的内联函数——显示内联
直接在类/结构的声明部分定义的成员函数——隐式内联
9. C++的内存分配
int* p;
int a[10];
int* p[10];
int (*p)[10];
int *p();
int (*p)();
int **p;
new/delete
原创粉丝点击