★封闭类:包含成员对象的类
●封闭类构造函数的初始化列表
定义封闭类的构造函数时,添加初始化列表:
类名::构造函数(参数表):成员变量1(参数表),成员变量2(参数表)...
●调用顺序
当封闭类对象生成的时候,
s1:执行所有成员对象的构造函数
s2:执行封闭类的构造函数
●成员对象的构造函数调用顺序
和成员对象在类中的说明顺序一致
与在成员初始化列表中出现的顺序无关
●当封闭类的对象消亡时,
s1:先执行封闭类的析构函数
s2:执行成员对象的析构函数
规范:
1、出现成员对象时,该类的构造函数要包含对成员的初始化。如果构造函数的成员初始化列表没有对成员对象初始化时,则使用成员对象的缺省构造函数。
2、建立一个类的对象时,应先调用其构造函数。但是如果这个类有成员对象,则要先执行成员对象自己所属类的构造函数,当全部成员对象都执行了自身类的构造函数后,再执行当前类的构造函数。
以下是实例:
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
class CTyre{
private:
int radius;
int width;
public:
CTyre(int r,int w):radius(r),width(w){};
CTyre(){ cout<<"CTyre contructor"<<endl;
~CTyre(){ cout<<"CTyre destructor"<<endl;
};
class CEngine{
public:
CEngine(){ cout<<"CEngine contructor"<<endl;
~CEngine(){ cout<<"CEngine destructor"<<endl;
};
class CCar{
// 这个类就是所谓的封闭类
//其中包括成员对象CEngine和CTyre
private:
int price;
CTyre tyre;
CEngine engine;
public:
CCar(int p, int tr,int tw );
};
CCar::CCar(int p, int tr,int tw ):price(p),tyre(tr,tw){};
int main(){
int p,tr,tw;
cout<<"请输入汽车的价格:"<<endl
cin>>p;
cout<<"请输入汽车轮胎的半径:"<<endl;
cin>>tr;
cout<<"请输入汽车轮胎的厚度:"<<endl;
sin>>tw;
CCar(p,tr,tw);
return 0;
}
作者:华中师范大学 计算机学院 蒲东齐
文本作者才疏学浅,如有错误,请指正!