#include <iostream>
using namespace std;
// 定义一个基类 Base
class Base {
public:
Base() {
cout << "Base constructor called" << endl;
}
virtual ~Base() {
cout << "Base destructor called" << endl;
}
};
// 定义两个派生类 Derived1 和 Derived2,它们都虚继承自 Base
class Derived1 : virtual public Base {
public:
Derived1() {
cout << "Derived1 constructor called" << endl;
}
~Derived1() {
cout << "Derived1 destructor called" << endl;
}
};
class Derived2 : virtual public Base {
public:
Derived2() {
cout << "Derived2 constructor called" << endl;
}
~Derived2() {
cout << "Derived2 destructor called" << endl;
}
};
// 定义一个多重继承的类 MultiDerived,它继承自 Derived1 和 Derived2
class MultiDerived : public Derived1, public Derived2 {
public:
MultiDerived() {
cout << "MultiDerived constructor called" << endl;
}
~MultiDerived() {
cout << "MultiDerived destructor called" << endl;
}
};
int main() {
cout << "Creating an object of MultiDerived" << endl;
MultiDerived obj;
cout << "Object of MultiDerived destroyed" << endl;
return 0;
}
虚继承:在 C++ 中,虚继承用于解决多重继承中的菱形问题(即避免基类被多次继承)。通过使用 virtual 关键字,可以确保即使一个派生类从多个基类继承,这些基类最终只会有一个实例。
构造函数调用顺序:
MultiDerived 对象时,首先调用的是 Base 的构造函数,因为它是虚基类。Derived1 和 Derived2 的构造函数。MultiDerived 的构造函数。析构函数调用顺序:
MultiDerived 的析构函数,然后是 Derived1 和 Derived2 的析构函数,最后调用 Base 的析构函数。输出结果:
Creating an object of MultiDerived
Base constructor called
Derived1 constructor called
Derived2 constructor called
MultiDerived constructor called
Object of MultiDerived destroyed
MultiDerived destructor called
Derived2 destructor called
Derived1 destructor called
Base destructor called
这个示例展示了如何使用虚继承来避免多重继承中基类的重复实例化,并确保构造和析构函数按正确的顺序调用。
上一篇:菜鸟 c++
下一篇:new c++
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站