【C++】虚继承相关问题
【c++】虚继承实例代码
虚继承就是为了解决二义性而产生的。 分为成员变量二义性和成员函数二义性 不调用同名成员则不产生二义性问题
为什么虚继承能够解决?
因为有了虚继承后能够让虚基类(基类还是那个基类,变化的只是继承时候的方式,加了关键字virtual使得继承方式变为了虚继承,此时基类就成为了虚基类,与抽象类完全不同!)中的成员只保存一份,不在子类中进行初始化。只有一个成员,自然不会产生二义性。
虚继承示例代码
#include <iostream>
using namespace std;
class A
{
public:
int _a;
A(int a = 0) :_a(a) {
cout << "A()" << endl; }
~A() {
cout << "~A()" << endl; }
};
class B :virtual public A
{
public:
B():A(99) {
cout << "B()"<< _a << endl; }
~B() {
cout << "~B()" << endl; }
};
class C:virtual public A
{
public:
C() :A(100) {
cout << "C()" << _a << endl; }
~C() {
cout << "~C()" << endl; }
};
class D:virtual public C, virtual public B
{
public:
D():A(101) {
cout << "D()" << _a << endl; }
~D() {
cout << "~D()" << endl; }
};
int main()
{
D d;
return 0;
}
可以看出虚基类只被初始化一次,是在最底层的子类创建时,虚基类被创建。
如果底层子类不调用:
除此之外,虚基类的创建还发生在自己创建的时候(如果底层子类没有调用构造函数) 虚继承只解决菱形继承的问题,其他多继承无需使用虚继承解决
下一篇:
java中遍历数组的三种常用方式(附码)
