protected inheritance - 保护基类构造函数或继承的类构造函数吗?

时间:2015-03-27 20:52:54

标签: c++ inheritance

我们说我有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(...)无法调用,因为公共功能受到保护?
请帮我清理一下,谢谢!

1 个答案:

答案 0 :(得分:1)

这不是构造函数继承的问题,而是涉及以下事实: - 继承受保护 - 在Manager之外注意事实知道有关{的存在{1}}子对象。

因此,将EmployeeManager*返回的内容)转换为new不可能是两种公开无关的类型。

将protected更改为public会使继承从外部可见(因此可以访问Employee*的{​​{1}}部分)