委托构造函数:
1、一个委托构造函数使用它所述的类的其他构造函数执行它自己的初始化过程,或者说它把它自己的一些(或者全部)职责委托给了其他构造函数。
//本例只是实例而已,不做细究
class Sales_data{
public:
Sales_data(std::string s, unsigned cnt, double price):
bookNo(s),units_sold(cnt), revenue(cnt*price){}
//其余构造函数全部委托于另一个构造函数
Sales_data()Sales_data("", 0, 0){}
Sales_data(std::string s):Sales_data(s, 0, 0){}
Sales_data(std::istream &is):Sales_data(){read(is, *this);}
};
当一个构造函数委托给另一个构造函数时,受委托的构造函数的初始值列表和函数体被依次执行。在Sales_data类中,受委托的构造函数体恰好为空, 假如函数体包含有代码的话,将先执行这些代码,然后控制权才会交还给委托者的函数体。
聚合类:
聚合类使得用户可以直接访问其成员,并且具有特殊的初始化语法形式。当一个类满足以下条件:
所有成员都是public的
没有定义任何构造函数
没有类内初始值
没有基类,也没有virtual函数
struct Data{
int ival;
string s;
};
初始化聚合类的数据成员:
Data val1 = {0, "Anna"};
//初始值的顺序必须与声明的顺序一致
类的静态成员:
静态成员可以是public的或private的。静态数据成员的类型可以是常量、引用、指针、类类型等。
静态数据成员,对于类对象来说,具有对象数据的共享性。
静态成员函数:
不包含this指针,不能声明为const
访问:
类对象、引用或者指针;来访问静态成员。
定义静态成员:
不在类对象创建时定义
不由类的构造函数初始化
必须在类的外部定义和初始化每个静态成员函数(显式的初始化)