虚基类

问题引入:

class A

{
public:
void f();
};


class B:public A
{
public:
void f();
};


class C:public A
{
public:
void f();
};


class D:public B,public C
{
public:
void f();
};


int main()
{
D d;
d.A::f();//ambiguous,不明确的
return 0;

}

解决方法:

问题引出:虚基类

class A//虚基类
{
public:
void f();
};


class B:virtual public A//虚继承
{
public:
void f();
};


class C:virtual public A
{
public:
void f();
};


class D:public B,public C
{
public:
void f();
};


int main()
{
D d;//注意:D直接构造A; B、C不生成A(引用); 构造顺序A,B,C,D
d.A::f();//正确
return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_40333952/article/details/80413529
今日推荐