1 类的成员默认为私有模型
2 类的声明内不允许对数据成员进行初始化
3 类的成员函数,如果在类外定义,只需在函数类型之前加上inline就为内联函数了,如果在类内定义函数则该函数自动成为内联成员函数(建议性的),当编译器确定某个函数为内联函数时这个函数肯定不是虚函数。关于此论断查看之前博客(c++内联函数与静态函数)
4 声明对象注意:类的数据成员可以是另一个已经定义的类的对象,不能是本类的对象;对于在程序之前没有定义或者仅是引用性声明的类不能定义对象
5 构造函数:a 不能有返回值和void b 公有函数 c 若没参数,则声明对象时不要在对象后面加括号,与java不同
构造函数可以定义为内联函数,可以带默认形参值,可以重载、
6 析构函数:析构函数的函数名应为类名前加“~”,没有参数,没有返回值类型,一个类只能一个析构函数
7 只有在定义构造函数时,才可以带有成员初始化列表,如果仅是声明构造函数,则不能带有成员初始化列表
8 静态数据成员:需要在类中进行引用性声明,之后为了获得内存需要在文件作用域中进行定义性声明,此时不需再写static。可以在定义时初始化和函数中初始化,但是不能使用构造函数的参数列表初始化。
9 静态成员函数:如果是在类外定义,同样不能再写static,只能调用静态变量。静态成员函数不能定义为常成员函数(??不在一个内存范围内)。
10 友元函数的特点:不是这个类的成员函数,在可以在函数体内通过对象名访问这个类的私有或者保护成员。
可以是一个普通函数也可以是其他类的成员函数;
在类中仅是在声明时在前面加上friend体现,具体的定义应是在类外,否则意义冲突。
友元声明在公有部分、私有部分和保护部分意义相同。
11 常对象:只能访问常成员函数,不能访问非常成员函数,但是常对象能访问常成员变量和非成员变量(已验证正确),背后的机理自己思考一下;
(??在声明常对象时,会自动将对象中对应的变量提升为常变量,但是函数不会??)
常对象声明时必须初始化,并且在其他地方不能再重新赋值。
常函数:类的常成员函数不能改变成员变量的值,也不能调用该类中的非常成员函数,结合常对象的特点,对于变量,如果是常对象调用常函数此时显然
常函数可以调用非常变量和常变量,如果是非常对象调用常函数此时应该不能调用非常变量(经验证猜想不对,因此上述??中的内容不对)。
结论:常函数能被常对象和非常对象调用,常函数只能调用常函数不能调用非常函数,但是能调用非常变量和常变量。
常成员变量:注意一点,常数据成员的初始化只能通过编写带有初始化列表的构造函数来实现。
12 全局变量和局部静态变量的区别:都具有静态生存期,但是全局变量的作用域是整个文件,局部静态变量的作用域仅在所定义的函数内或者块内。