请不要质疑工人的真正奇怪的层次结构,这个代码在这里,我不知道为什么会有人想是这样的,但我决定给自己在多重继承的锻炼,只是要确定我完全理解它。 因此,这里的结果。
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());
}
};
希望你理解我想要在这里做。 我收到一些关于一个“派生类‘监’和基类的员工。“暧昧之间的转换”所以,我该怎么办?
其实,你所定义的方式Supervisor
类,它的对象有型的二级学科Employee
,分别来自其基类的到来。 这是造成问题。
该解决方案是使用虚拟继承 (假设你需要多重继承)为:
class Manager : public virtual Employee
希望大家注意, virtual
这里的关键字。 :-)
每个人都已经覆盖了虚拟继承,但我建议你阅读C ++常见问题为好。
http://www.parashift.com/c++-faq-lite/multiple-inheritance.html
你需要在这种情况下,虚拟继承:
#include <iostream>
#include <string>
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 virtual Employee
{
public:
string getname()
{
return ("Manager" + name);
}
Manager(string name2) : Employee(name2){}
Manager() : Employee(){}
};
class Supervisor : public Manager,public virtual Employee
{
public:
Supervisor(string name2) : Manager(name2) , Employee(name2){}
Supervisor() : Manager() , Employee(){}
string getname()
{
return ("Supervisor" + Employee::getname());
}
};
这个问题也被称为菱形继承问题: http://en.wikipedia.org/wiki/Diamond_problem
Supervisor
包含Employee类型的两个对象,直接一个和一个过经理。 它是暧昧叫Employee
在方法Supervisor
在后果( 其中员工应该叫什么名字?)。 您可能需要使用虚拟多重继承来代替。