1)switch语句中的条件必须是整型(即bool、int、 long和char等)、枚举类型或者是类类型。如果条件是类类型的,则该类必须具有一个将类类型转换成整型或枚举类型的类型转换函数(具有单个参数的构造函数被用作将参数类型转换为该类类型的转换函数)。
2)extern保留字表示变量的引用性声明,即使用在其它作用域上声明的变量。
3)using namespace std; 是把在std作用域中的标识符的作用域扩展到using语识破所在的作用域中(从该语句开始,直至包含该语句的作用域末尾)。
4)局部变量的默认存储类别为auto,全局变量的默认存储类别为extern。
5)不能通过cin和cout直接输入或输出枚举元素值,只能通过判断,另行赋值或输出。
6)同一类的多个对象共用同一份成员函数的代码,是C++中为了节省内存而采用的对象存储方式,在逻辑上我们仍应该将对象看作独立的个体,每个对象有自己的数据成员,也有自己的成员函数。
7)构造函数没有返回值,当然也没有返回类型,即使是void类型也不允许。
8)在构造函数中动态分配的内存空间通常在析构函数中释放等。
9)void fun( array [], ...)中的arrayr后面加上[]并不表示array是数组名,数组名是常量,而此处的array作为形参是一个变量,实际上是一个指针变量,用以接收外部传递进来的地址值。
10)枚举类型的变量可以与整型进行运算,结果为整型,但整型量不能直接赋值给枚举类型的变量,需要使用强制类型转换。
11)typedef float FloatArr[100]; FloatArr angel; 等价于 float angel[100];。
12)枚举类型可以作为数组元素的下标。
13)二维数组作为形参表示方式为array[][COL],即必须给出第二维的长度。
14)定义指针变量语句中的*代说明是指针变量,指针操作符*用来取得指针所指向的变量。
15)void *p; 可以把某段内存的起始地址赋给p,但p究竟指向什么类型的数据尚未确定,需要后面再进行强制类型转换。当得到指向某种确定类型的指针后,才能使用。
16)对引用传递参数而言,形参和实参实质为同一变量,或者说形参是实参的别名。例如,为变量a起了一个别名x,实际上a和x都是同一变量。而使用指针作函数参数,则是使用被调函数获得某变量的地址,从而使用这个地址访问这个变量。
17)动态分配内存两种方法:C语言malloc & free和C++的new & delete。例:int *p = (int*) malloc (sizeof(int) * length); malloc返回的是void *类型,所以需要强制转换(int *), 释放时为free(p);另一种为int *p = new int[length], delete []p;但是malloc 和 free一般仅用于简单数据类型的动态内存分配,而对于对象的动态内存分配,则需要利用new和delete。因为new/delete操作中,会调用对象的构造函数/析构函数进行初始化/收尾工作,而malloc和free则无此功能。
18)二维数组指针;int a[3][4] = ...; int (*p)[4] = a;
19)二维数组的动态分配;float **s; s = new float*[num]; for(....) s[i] = new float[cnum];释放则先delete []s[i]再delete []s。
20)main(argc, argv[]);第一个参数是函数名。
21)指向结构体变量和类的指针访问成员的方法是->。
22)对象的动态创建和撤销需要使用指向指向对象的指针。
23)对象的浅复制是直接把值赋给相同类型的另一个对象,当数据成员中不出现指针时,是没有任何问题的,但如果一些数据成员是指针变量,就会出现“指针别名”和“内存垃圾”现象。为了避免这个问题,应该用深复制——创建复制构造函数。
24)函数指针定义:int (*p) ( int, int) ; p = min;
to be continued...