MST

星途 面试题库

面试题:C++中构造函数与析构函数调用顺序的基础应用

假设有如下C++代码: ```cpp class A { public: A() { std::cout << "A's constructor" << std::endl; } ~A() { std::cout << "A's destructor" << std::endl; } }; class B { public: B() { std::cout << "B's constructor" << std::endl; } ~B() { std::cout << "B's destructor" << std::endl; } }; class C : public A { public: B b; C() { std::cout << "C's constructor" << std::endl; } ~C() { std::cout << "C's destructor" << std::endl; } }; ``` 当执行 `C c;` 时,输出的顺序是什么,请详细说明原因。
24.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 输出顺序
    • “A's constructor”
    • “B's constructor”
    • “C's constructor”
  2. 原因
    • 当执行 C c; 时,首先会调用基类 A 的构造函数。因为在创建派生类 C 的对象时,需要先初始化其基类部分,所以 A 的构造函数先执行,输出 “A's constructor”。
    • 接着,按照类 C 中成员变量声明的顺序,会调用成员变量 b(类型为 B)的构造函数,输出 “B's constructor”。
    • 最后,执行 C 自身的构造函数,输出 “C's constructor”。
  3. 析构函数调用顺序
    • c 的生命周期结束时,析构函数调用顺序与构造函数相反。
    • 首先执行 C 的析构函数,输出 “C's destructor”。
    • 然后执行成员变量 b 的析构函数,输出 “B's destructor”。
    • 最后执行基类 A 的析构函数,输出 “A's destructor”。