我们说我有2个班级
class Employee {//constructor definition};
class Manager : protected Employee{ //constructor definition};
Manager::Manager (string newName, double newPayRate, double newHours, bool newSalariedEmployee): Employee (newName, newPayRate, newHours)
{
mSalaried = newSalariedEmployee;
}
Employee::Employee (string newName, double newPayRate, double newHours)
{
mName = newName;
mPayRate = newPayRate;
mHours = newHours;
}
int main ()
{
Employee *pMan = new Manager("bob", 0.5, 98, false); //squishy line
return 0;
};
我知道,如果我将protected
更改为public
,那么Employee *pMan = new Manager("bob", 0.5, 98, false);
将会有效,但我还有其他问题
1.调用new Manager (...)
时是否发生错误?由于new
不是Manager()
的成员函数,因此new
无法访问Manager(...)//default constructor
2.或者流程无法完成,因为当它进入Manager::Manager (string newName, double newPayRate, double newHours, bool newSalariedEmployee): Employee (newName, newPayRate, newHours)
时,Employee(...)
无法调用,因为公共功能受到保护?
请帮我清理一下,谢谢!
答案 0 :(得分:1)
这不是构造函数继承的问题,而是涉及以下事实: - 继承受保护 - 在Manager
之外注意事实知道有关{的存在{1}}子对象。
因此,将Employee
(Manager*
返回的内容)转换为new
不可能是两种公开无关的类型。
将protected更改为public会使继承从外部可见(因此可以访问Employee*
的{{1}}部分)