在Hybrid Inheritance

时间:2016-04-19 15:53:35

标签: c++ inheritance

我写了一个C ++程序。

#include <iostream>
#include <string>

using namespace std;

class A
{
    int a;
public:
    void read()
    {

      cin>>a;
    }
};

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

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

class D:public B,public C
{
public:

   void display()
   {
       cout<<a<<endl;
   }
};

void main()
{
  A a1;B b1;C c1;
  D d1;
  d1.display();
}

我收到一条消息说有歧义。 B继承A ..所以B类将从A类继承项'a'。此外,C类将继承A类中的项'a'。现在如果我试图继承D类中的B和C类,那么'a'我可以访问?来自B级或C级?有什么方法可以消除歧义。?

1 个答案:

答案 0 :(得分:0)

您可以使用以下选项之一修复歧义问题:

明确基类

使用B作为显式基类

  void display()
  {
     cout<< B::a <<endl;
  }

或使用C作为显式基类。

  void display()
  {
     cout<< C::a <<endl;
  }

使用virtual继承

更改BC以使用virtual继承。

class B: virtual public A
{
   public:
      B() {} 
};

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