C++ 中的多重继承与 3 个派生 类

Multiple Inheritance in C++ with 3 derived classes

我正在尝试使用多重继承。 是我的基地class。 StudentAngestellter 继承受保护的属性。 WissenschaftlicheHilfskraft 也应该继承这些属性(来自 Person、Student、Angestellter),但我不能在我最后派生的 class 中调用方法 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;
}

我希望它看起来像这样:

这是多重继承的经典 "diamond" 问题。您可以通过消除歧义来解决这个问题,例如变化:

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

至:

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

但是,请参阅 以获得正确解决潜在问题的更好解决方案。

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

class Student: public Person { 变成 class Student: public virtual Person { 等等。这样可以保证最后一个对象只创建一个base对象。