1、对象的生存期
静态生存期:这种生存期与程序的运行期相同,在文件作用域中声明的对象具有这种生存期,在函数内部声明静态
生存期对象,要冠以关键字 static。
动态生存期:块作用域中声明的对象时动态生存期的对象(习惯称局部生存期对象),开始于程序执行到声明点时,
结束于命名该标识符的作用域结束处。
2、静态成员
静态数据成员:用关键字 static 声明,该类的所有对象维护该成员的同一个拷贝,必须在类外定义和初始化,
用(::)来指明所属的类。
静态成员函数:类外代码可以使用类名和作用域操作符来调用静态成员函数,静态成员函数只能引用属于该类
的静态数据成员或静态成员函数。
实例:
class A { public: static void f(A a); private: int x; }; void A::f(A a) { cout << x; //对 x 的引用是错误的 cout << a.x; //正确 }
3、类的友元
友元是 C++ 提供的一种破坏数据封装和数据隐藏的机制。通过将一个模块声明为另一个模块的友元,一个模块能够引用
到另一个模块中本是被隐藏的信息。可以使用友元函数和友元类。
为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元。
友元函数:是在类声明中由关键字 friend 修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和 protected成员
访问对象中的成员必须通过对象名。
友元类:若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员。
声明语法:将友元类名在另一个类中使用 friend 修饰说明。
实例:
class A { public: void display() {cout << x << endl;} int getX() {return x;} friend class B; //B 类是 A 类的友元类 private: int x; }; class B { public: void set(int i); void display(); private: A a; }; void B::set(int i) { a.x = i; //由于 B 是 A 的友元, //所以在B的成员函数中可以访问 A 类对象的私有成员 }
4、常类型
常类型的对象必须进行初始化,而且不能被更新。
常引用: const 类型说明符 &引用名
常对象: 类名 const 对象名
常数组:类型说明符 const 数组名[大小]...
常成员函数: 类型说明符 函数名(参数表) const;
const 关键字可以被用于参与对重载函数的区分
通过常对象只能调用它的常成员函数。