面试题答案
一键面试- 调用顺序说明:
- 构造函数:先调用基类的构造函数,然后调用派生类的构造函数。这是因为派生类对象包含基类对象部分,需要先初始化基类部分,再初始化派生类新增的部分。
- 析构函数:与构造函数顺序相反,先调用派生类的析构函数,然后调用基类的析构函数。这样可以保证在销毁对象时,先清理派生类新增的资源,再清理基类的资源。
- 代码示例:
#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.
这清晰地展示了构造函数和析构函数的调用顺序。