#include <iostream>
using namespace std;
class A
{
public:
A(){};
void showA(){cout<<"hello A"<<endl;}
};
class B: public virtual A
{
public:
B(){};
void show(){cout<<"hello B"<<endl;}
};
class C: public virtual A
{
public:
C(){};
void show(){cout<<"hello C"<<endl;}
};
class D: public B, C
{
public:
D(){};
void show(){cout<<"hello D"<<endl;}//覆盖
void showB(){C::show();}//重新定义
};
int main(int argc, char* argv[])
{
D d;
d.showA();
d.show();
d.showB();
return 0;
}
//上述code中,如果没有采用虚拟继承,编译器不知道具体调用哪一个showA,因为B和C同时具有A的对象,
//另外,如果d.show(),编译出错,不管是不是虚拟继承,因为编译器不能定位是哪一个show
多重继承
最新推荐文章于 2022-02-21 19:55:47 发布