响应式网站建设服务提供商,服务周到的网站建站,如何进行简单的网页设计,企业网站备案要多少钱有其他类的对象作为 成员对象的类叫封闭类。
任何生成封闭类对象的语句#xff0c;都要让编译器明白#xff0c;对象中的成员对象#xff0c;是如何初始化的。 具体做法是通过封闭类的构造函数的初始化列表。
封闭类对象生成时#xff0c;先执行所有对象成员的构造函数都要让编译器明白对象中的成员对象是如何初始化的。 具体做法是通过封闭类的构造函数的初始化列表。
封闭类对象生成时先执行所有对象成员的构造函数然后才执行封闭类的构造函数。
对象成员的构造函数调用次序和对象成员在类中的说明次序一致与它们在成员初始化列表中的出现次序无关。
当封闭类对象消亡时先执行封闭类的析构函数然后再执行成员对象的析构函数。次序和构造函数的调用顺序相反。其原因是如果封闭类带的析构函数中使用到了成员对象的内容那么先执行成员对象的析构函数就可能会导致封闭类的析构函数在执行时发生不可预估的错误。
封闭类构造函数实例。
class CTyre {
private:int radius;int width;public:CTyre(int r, int w):radius(r), width(w) {} // init list
}; class CEngine {};class CCar { // 汽车类 - 封闭类
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()
{CCar car(20000, 17, 225);return 0;
}
如果 CCar 类不定义构造函数则 CCar car; 将出现编译错误 编译器不知道 car.tyre 该如何初始化 car.engine 初始化没有问题用默认构造函数
生成封闭类对象的语句 - 明确“对象中的成员对象”- 如何初始化
定义封闭类的构造函数时添加初始化列表
类名::构造函数(参数表):成员变量1(参数表), 成员变量2(参数表), ...
{...
}调用顺序
当封闭类对象生成时 首先执行所有成员对象的构造函数 最后执行封闭类的构造函数
成员对象的构造函数调用顺序
1.和成员对象在类中的说明顺序一致 2.与在成员初始化列表中出现的顺序无关
当封闭类的对象消亡时
首先先执行封闭类的析构函数 最后执行成员对象的析构函数