01 成员对象与封闭类
类里有其他对象则该对象叫成员对象;有成员对象的类叫 封闭类;
class CTyre // 轮胎类
{
public:
// 有参数构造函数
// 初始化成员变量m_radius和m_width
CTyre(int r, int w):m_radius(r),m_width(w) { }
private:
int m_radius; // 半径
int m_width; // 宽度
};
class CEngine // 引擎类
{
// 默认会有无参数构造函数
};
class CCar // 汽车类 -- 封闭类
{
public:
// 有参数构造函数
// 对成员变量m_price初始化,对成员对象tyre初始化
CCar(int p, int tr, int tw):m_price(p),tyre(tr,tw){}
private:
int m_price; // 价格
CTyre tyre; // 成员对象
CEngine engine; // 成员对象
};
int main()
{
CCar car(10000,20,50);
return 0;
}
上例中,如果CCar
类不定义构造函数,则会使用默认的无参构造函数,那么下面的语句会编译出错:
CCar car;
因为编译器不明白CCar
类中的tyre
成员对象该如何初始化。engine
成员对象的初始化则没问题呢,因为用默认构造函数即可。
任何生成封闭类对象的语句,都要让编译器明白,对象中的成员对象,是如何初始化的。
具体的做法是:通过封闭类的构造函数的初始化列表。
02 封闭类构造函数和析构函数的执行顺序- 封闭类对象生成时,先执行所有成员对象的构造函数,然后才执行封闭类的构造函数。
- 成员对象的构造函数执行顺序,与在封闭类定义成员对象的顺序一致。
- 当封闭类的对象消忙时,只需要记住一句话:先构造的对象,后析构,由于封闭类是最后才被构造的,所以封闭类对象最先析构。
class CTyre // 轮胎类
{
public:
CTyre(){ std::cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?