【发布时间】:2015-01-05 21:37:14
【问题描述】:
我想了解派生类中纯虚函数在传递与(抽象)基类相同类型的参数时的行为。
为了澄清这个问题,我从 GeeksForGeeks 获取了以下代码并对其进行了修改:
namespace example {
enum Type {ENGINEER, MANAGER};
class Employee
{
private:
const Type worker;
public:
Employee(const Type& worker) : worker(worker) {}
virtual ~Employee {}
virtual void raiseSalary(const Employee&) = 0;
{ /* common raise salary code */ }
virtual void promote(const Employee&) = 0;
{ /* common promote code */ }
};
class Manager: public Employee {
private:
int degree;
public:
//<constructor>\\
virtual void raiseSalary(const Employee&)
{ /* Manager specific raise salary code, may contain
increment of manager specific incentives*/ }
virtual void promote(const Employee&)
{ /* Manager specific promote */ }
};
}
现在,我们如何访问派生类Manager 中的字段degree 以更新他的degree?因为传递给raiseSalary(Employee& employee) 的参数可能是Manager 或Engineer
【问题讨论】:
-
使用
static_cast可能建议使用switch或ifstatments。我正在寻找一种利用 OOP 功能的方法。有没有办法克服这个问题? -
您的设计可能有缺陷。在这种情况下,将学位作为员工的一部分可能有意义吗?
-
如果不是基类的属性,则不能修改该属性...
-
但是说不同类型的工人有不同的私有字段。将它们添加到 Employee 是很痛苦的。
-
为什么要将员工传递给非静态方法?
标签: c++ abstract-class virtual