C++面向对象入门(二十九)虚基类

虚基类:派生类A继承自多个基类B,C,..., 而B,C,...又继承自同一个基类D, 若在B,C,...基类定义继承关系时, 声明基类D为虚基类,
则在A中自会产生一个基类对象
作用:解决二义性问题

 

 

代码示例:

#include <iostream>
using namespace std;

/*
虚基类:派生类A继承自多个基类B,C,..., 而B,C,...又继承自同一个基类D, 若在B,C,...基类定义继承关系时, 声明基类D为虚基类,
则在A中自会产生一个基类对象
作用:解决二义性问题
*/
class A46
{
public:
    A46();
    int val;
};

class B46 :public virtual A46
{
public:
    void setVal()
    {
        cout << "before setVal, val = " << val << endl;
        val = 2;
    }
};

class C46 :public virtual A46 {
public:
    void setVal()
    {
        cout << "before setVal, val = " << val << endl;
        val = 3;
    }
};

class D46 :public B46, public C46
{
public:
    void test();
};
int main()
{
    D46 d;
    d.test();
    d.B46::setVal();
    d.test();
    d.C46::setVal();
    d.test();
    system("pause");
}

A46::A46():val(1)
{
}

void D46::test()
{
    cout << "val = " << val << endl;
}

 

posted @ 2020-08-31 22:08  DNoSay  阅读(164)  评论(0编辑  收藏  举报