用C++语言定义一个哺乳动物类Mammal,再由此派生出狗类Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序
时间: 2024-11-20 17:40:10 浏览: 62
在C++中,当你定义一个基类`Mammal`并从它派生出子类`Dog`时,会涉及到构造函数和析构函数的调用。构造函数会在创建新对象时自动执行,而析构函数则是在对象生命周期结束、即将被销毁时执行。
首先,让我们看下基本的代码结构:
```cpp
class Mammal {
public:
// 构造函数
Mammal() {
std::cout << "Mammal constructor called.\n";
}
// 析构函数
~Mammal() {
std::cout << "Mammal destructor called.\n";
}
};
class Dog : public Mammal { // 继承Mammal
public:
// 构造函数(继承自Mammal)
Dog() : Mammal() {
std::cout << "Dog constructor (calls Mammal's) called.\n";
}
// 可能有Dog特有的析构函数
~Dog() override {
std::cout << "Dog destructor called.\n";
}
};
int main() {
// 创建Dog类的对象
Dog myDog;
return 0;
}
```
当上述代码运行时,会发生以下顺序的构造函数和析构函数调用:
1. `Mammal()`构造函数:这是基类`Mammal`的构造函数,首先被执行。
2. `Dog()`构造函数:派生类`Dog`的构造函数,它会先调用基类`Mammal`的构造函数。
3. `main()`函数结束后,`myDog`对象开始析构过程:
- `~Dog()`析构函数:派生类`Dog`的析构函数,会自动调用父类`Mammal`的析构函数。
- `~Mammal()`析构函数:最后,基类`Mammal`的析构函数被调用。
阅读全文