protected inheritance - 基 class 构造函数是受保护的还是继承的 class 构造函数是受保护的?
protected inheritance - Does the base class constructor protected or the inherited class constructor protected?
假设我有 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)
时,由于 public 函数受到保护而无法调用 Employee(...)
?
请帮我解决一下,谢谢!
这不是构造函数继承的问题,而是与这样一个事实有关 - 作为继承保护 - 在 Manager
之外注意实际上 知道 Employee
子对象。
因此,将 Manager*
(new
returns)转换为 Employee*
是不可能的,因为这两种类型 public 完全不相关。
将 protected 更改为 public 可以使继承从外部可见(因此可以访问 Manager
的 Employee
部分)
假设我有 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)
时,由于 public 函数受到保护而无法调用 Employee(...)
?
请帮我解决一下,谢谢!
这不是构造函数继承的问题,而是与这样一个事实有关 - 作为继承保护 - 在 Manager
之外注意实际上 知道 Employee
子对象。
因此,将 Manager*
(new
returns)转换为 Employee*
是不可能的,因为这两种类型 public 完全不相关。
将 protected 更改为 public 可以使继承从外部可见(因此可以访问 Manager
的 Employee
部分)