写一个c++析构函数含有多重继承与派生
时间: 2023-12-06 19:44:22 浏览: 85
实现c++类的多重继承的例程
假设我们有如下的多重继承和派生的类:
```c++
class A {
public:
A() { cout << "Constructing A" << endl; }
virtual ~A() { cout << "Destructing A" << endl; }
};
class B {
public:
B() { cout << "Constructing B" << endl; }
virtual ~B() { cout << "Destructing B" << endl; }
};
class C : public A, public B {
public:
C() { cout << "Constructing C" << endl; }
~C() { cout << "Destructing C" << endl; }
};
```
在类 `C` 中,我们同时继承了类 `A` 和类 `B`,并且派生出了一个新的类 `C`。为了保证内存的正确释放,我们需要在 `C` 类的析构函数中调用 `A` 和 `B` 的析构函数。
```c++
int main() {
C obj;
return 0;
}
```
当我们创建一个 `C` 类型的对象时,构造函数的输出应该是:
```
Constructing A
Constructing B
Constructing C
```
当程序结束时,析构函数的输出应该是:
```
Destructing C
Destructing B
Destructing A
```
因此,我们需要在 `C` 类的析构函数中调用 `A` 和 `B` 的析构函数:
```c++
class C : public A, public B {
public:
C() { cout << "Constructing C" << endl; }
~C() {
cout << "Destructing C" << endl;
// 调用 A 和 B 的析构函数
A::~A();
B::~B();
}
};
```
注意,我们在调用 `A` 和 `B` 的析构函数时,使用了作用域限定符 `::`。这是因为我们需要显式地指明调用的是 `A` 和 `B` 类的析构函数,而不是 `C` 类的析构函数。否则,会发生递归调用,导致程序崩溃。
当程序结束时,析构函数的输出应该是:
```
Destructing C
Destructing B
Destructing A
```
阅读全文