C++ 成员对象和封闭类
成员对象:一个类的成员变量是另一个类的对象
包含成员对象的类叫封闭类 (Enclosing)
如下代码:
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.与在成员初始化列表中出现的顺序无关
当封闭类的对象消亡时,
第一步:先执行封闭类的析构函数
第二步:执行成员对象的析构函数
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!