一、可变数据成员
1、我们希望类的数据成员(甚至在const成员函数内)可以修改,这可以将它们声明为mutable来实现。
2、可变数据成员永远都不能为const,甚至当它是const对象的成员时也如此。
二、static数据成员和static成员函数
1、static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联。
2、正如类可以定义共享的static数据成员一样,类也可以定义static成员函数。static成员函数并没有this形参,它可以直接访问所属类的static成员,但不能直接使用非static成员。
3、可以通过作用域操作符从类直接调用static成员,或者通过对象、引用或指向该类型对象的指针间接调用。
4、像其他成员一样,类成员函数可以不用作用域操作符来引用类的static成员。
5、当我们在类的外部定义static成员时,无须重复指定static保留字,该保留字只出现在类定义体内部的声明处。
6、static成员函数不能被声明为const,也不能被声明为虚函数。
7、static数据成员必须在类定义体外部定义(正好一次)。不像普通数据成员,static成员不是类构造函数进行初始化,而是应该在定义是进行初始化。
8、只要初始化式是一个常量表达式,整型const static数据成员就可以在类的定义体中进行初始化,但该数据成员仍必须在类的定义体之外进行定义(此时不必再指定初始值)。
9、因为static数据成员不是任何对象的组成部分,所以它们的使用方式对于非static数据成员而言是不合法的。(1)static数据成员的类型可以是该成员所属的类类型。非static成员被限定声明为其自身类对象的指针或引用;(2)static数据成员可以做默认实参,非static数据成员不能用作默认实参。
三、友元
1、友元(friend)机制允许一个类将对其非公有成员的访问权授予制定的函数或类。友元的声明以关键字friend开始。它只能出现在类定义的内部。友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所以它们不受其声明出现部分的访问控制影响。
2、当我们将成员函数声明为友元时,函数名必须用该函数所属的类名字加以限定。
3、必须先定义包含成员函数的类,才能将成员函数设为友元。另一方面,不必预先声明类和非成员函数来将它们设为友元。