设计模式,简单工厂模式,为了去switch,类申明前后两难问题

oN5GrzoN oN5GrzoN 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
原文C#
我用C++写的

class Employee
{
protected:
double m_basicSalary;
public:
Employee(double base = 1800):m_basicSalary(base)
{

}
virtual double PayAmount() const = 0;
static Employee* CreateEmployee(EmployeeType et)
{
switch(et)
{
case ENGINEER:
return new Engineer();
case SALESMAN:
return new SalesMan();
default:
throw "no such employee type!";
}
}
};
class Engineer : public Employee
{
public:
double PayAmount() const
{
return m_basicSalary;
}
};
class SalesMan : public Employee
{
double m_commission;
public:
SalesMan(double commission = 1000):m_commission(commission)
{

}
double PayAmount() const
{
return m_basicSalary+m_commission;
}
};


编译的时候Employee类里用到了new Engineer(),engineer现在在后边,所以编译通过不了
如果使用前置申明,把class Engineer申明到Employee之前,说Engineer没有合适的构造函数。

如果把class Employee放到class Engineer,也不可能。
怎么做呢?
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
oN5GrzoN
模式及实现 5,529 成员 4,167 内容