C ++中的多重继承,带有3个派生类

时间:2016-12-14 10:00:11

标签: c++ inheritance multiple-inheritance

我正在尝试使用多重继承。 Person 是我的基类。 学生 Angestellter 继承受保护的属性。 WissenschaftlicheHilfskraft 也应该继承这些属性(来自Person,Student,Angestellter),但我不能在我的上一个派生类中调用方法get_name()。为什么呢?

#include <iostream>

using namespace std;

class Person {
      protected:
              string name;
      public:              //.......
          string get_name() { name = "bob"; return name; }
};

class Student: public Person {
private:    //......
public:     //......
};

class Angestellte: public Person {
private:    //......
public:    //......
};

class WissenschaftlicheHilfskraft : public Student, public Angestellte
{
private: //......
public: //......
};


int main()
{
    Person p;
    cout << p.get_name() << endl;   //WORKS
    Student s;
    cout << s.get_name() << endl;   //WORKS
    Angestellte a;
    cout << a.get_name() << endl;   //WORKS
    WissenschaftlicheHilfskraft wh;
    cout << wh.get_name() << endl;  //DOESN'T WORK
    return 0;
}

我希望它看起来像这样: enter image description here

2 个答案:

答案 0 :(得分:2)

这是具有多重继承的经典“钻石”问题。您可以通过消除歧义来解决此问题,例如:改变:

cout << wh.get_name() << endl;  //DOESN'T WORK

为:

cout << wh.Student::get_name() << endl;  //WORKS

但是,请参阅@Shiv's answer以获得更好的解决方案,以便妥善解决潜在问题。

答案 1 :(得分:2)

另外,除了Paul R的回答,你的继承是错误的。您需要使用虚拟继承,如图所示here

class Student: public Person {变为class Student: public virtual Person {,依此类推。这样可以确保只为最终对象创建一个base对象。