C++ 成员对象和封闭类
2019-11-28 16:02:36来源:博客园 阅读 ()
C++ 成员对象和封闭类
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 << "CTyre 构造函数" << std::endl; }
~CTyre(){ std::cout << "CTyre 析构函数" << std::endl; }
};
class CEngine // 引擎类
{
public:
CEngine(){ std::cout << "CEngine 构造函数" << std::endl; }
~CEngine(){ std::cout << "CEngine 析构函数" << std::endl; }
};
class CCar // 汽车类 -- 3. 最后构造封闭类对象
{
public:
CCar(){ std::cout << "CCar 构造函数" << std::endl; }
~CCar(){ std::cout << "CCar 析构函数" << std::endl; }
private:
CTyre tyre; // 1. 先构构造该成员对象
CEngine engine; // 2. 接着构造该成员对象
};
int main()
{
CCar car;
return 0;
}
执行结果:
CTyre 构造函数
CEngine 构造函数
CCar 构造函数
CCar 析构函数
CEngine 析构函数
CTyre 析构函数
03 封闭类的复制构造函数
class A
{
public:
// 无参数构造函数
A() { std::cout << "A 构造函数" << std::endl; }
// 复制构造函数
A(A & a) { std::cout << "A 复制构造函数" << std::endl; }
};
class B
{
// 若没有声明构造函数和复制构造函数,则编译器会默认生成构造函数和复制构造函数
A a; // 成员对象
};
int main()
{
B b1; // b1对象 和 成员对象a都会执行无参数的构造函数
B b2(b1); // b2对象 和 成员对象a都会执行复制构造函数
return 0;
}
输出结果:
A 构造函数
A 复制构造函数
原文链接:https://www.cnblogs.com/xiaolincoding/p/11954911.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C++ this指针的理解和作用
下一篇:C++ static静态成员
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash