MST
星途 面试题库

面试题:C++派生新类时构造函数和析构函数的调用顺序

在C++中,当从一个基类派生出一个新类时,请详细说明构造函数和析构函数的调用顺序,并通过一个简单的代码示例进行展示。
34.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 调用顺序说明
    • 构造函数:先调用基类的构造函数,然后调用派生类的构造函数。这是因为派生类对象包含基类对象部分,需要先初始化基类部分,再初始化派生类新增的部分。
    • 析构函数:与构造函数顺序相反,先调用派生类的析构函数,然后调用基类的析构函数。这样可以保证在销毁对象时,先清理派生类新增的资源,再清理基类的资源。
  2. 代码示例
#include <iostream>

class Base {
public:
    Base() {
        std::cout << "Base constructor called." << std::endl;
    }
    ~Base() {
        std::cout << "Base destructor called." << std::endl;
    }
};

class Derived : public Base {
public:
    Derived() {
        std::cout << "Derived constructor called." << std::endl;
    }
    ~Derived() {
        std::cout << "Derived destructor called." << std::endl;
    }
};

int main() {
    Derived d;
    return 0;
}

在上述代码中,main函数创建了一个Derived类对象d。运行结果如下:

Base constructor called.
Derived constructor called.
Derived destructor called.
Base destructor called.

这清晰地展示了构造函数和析构函数的调用顺序。