C++多重继承

Who*_*ian 1 c++ inheritance multiple-inheritance diamond-problem

请不要在这里对这段代码中真正奇怪的工人层级提出质疑,我不知道为什么有人会想要这样的东西,但我决定给自己一个多重继承的练习,只是为了确保我完全理解它.所以这是结果.

using namespace std;

class Employee
{
protected:
    string name;
public:
    string getname()
    {
        return name;
    }
    void setname(string name2)
    {
        name = name2;
    }
    Employee(string name2)
    {
        name = name2;
    }
    Employee(){}
};

class Manager : public Employee
{
public:
    string getname()
    {
        return ("Manager" + name);
    }
    Manager(string name2) : Employee(name2){}
    Manager() : Employee(){}
};

class Supervisor : public Manager,public Employee
{
public:
    Supervisor(string name2) : Manager(name2) , Employee(name2){}
    Supervisor() : Manager() , Employee(){}
    string getname()
    {
        return ("Supervisor" + Employee::getname());
    }
};
Run Code Online (Sandbox Code Playgroud)

希望你能理解我在这里要做的事情.我得到了一些关于"衍生类'主管'和基类'员工'之间的模糊转换."那么我该怎么办?

Naw*_*waz 6

实际上,你定义Supervisor类的方式,它的对象将有两个类型的主题Employee,每个主题来自它的基类.那是造成问题的原因.

解决方案是使用虚拟继承(假设您需要多重继承):

class Manager : public virtual Employee 
Run Code Online (Sandbox Code Playgroud)

希望你在virtual这里注意关键字.:-)