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

oN5GrzoN 2013-01-23 03:11:34
原文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,也不可能。
怎么做呢?
...全文
125 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
IranCyberArmy 2013-01-23
  • 打赏
  • 举报
回复
CreateEmployee需要放在EmployeeFactory类里

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧