在C++的继承和多态中,下面这种代码可以简化吗?

BlueanGel 2005-12-12 06:46:52
COnDuty, CMemo, CNotice, CWeekReport 都继承自 CBase

void CMy::dispatchMod(void)
{
vector<string> deal;

if(m_szMod.compare("onduty") == 0){
COnDuty opMod;
if(m_szDo.compare("add") == 0){
opMod.addData();
result.push_back(opMod.getMessage());
}
if(m_szDo.compare("edt") == 0){
opMod.edtData();
result.push_back(opMod.getMessage());
}
}

if(m_szMod.compare("memo") == 0){
CMemo opMod;
if(m_szDo.compare("add") == 0){
opMod.addData();
result.push_back(opMod.getMessage());
}
if(m_szDo.compare("edt") == 0){
opMod.edtData();
result.push_back(opMod.getMessage());
}
}

if(m_szMod.compare("notice") == 0){
CNotice opMod;
if(m_szDo.compare("add") == 0){
opMod.addData();
result.push_back(opMod.getMessage());
}
if(m_szDo.compare("edt") == 0){
opMod.edtData();
result.push_back(opMod.getMessage());
}
}

if(m_szMod.compare("weekreport") == 0){
CWeekReport opMod;
if(m_szDo.compare("add") == 0){
opMod.addData();
result.push_back(opMod.getMessage());
}
if(m_szDo.compare("edt") == 0){
opMod.edtData();
result.push_back(opMod.getMessage());
}
}

deal(result);
}
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
freemme 2005-12-13
  • 打赏
  • 举报
回复
sorry,1. 函数DoIt在CBase中是虚函数,在各个子类中重载,根据‘m_szMod’调用相应的函数
应该改为:1. 函数DoIt在CBase中是虚函数,在各个子类中重载,根据‘m_szDo’调用相应的函数
freemme 2005-12-13
  • 打赏
  • 举报
回复
dispatchMod函数可以这样简化:
void CMy::dispatchMod(CBase *pIn)
{
vector<string> deal;

pIn->DoIt(m_szDo, result);
deal(result);
}

说明:
1. 函数DoIt在CBase中是虚函数,在各个子类中重载,根据m_szMod调用相应的函数
2. 根据m_szMod分别实例化各个子类,传递到函数dispatchMod中
3. 这样的好处是扩展性好,高内聚、低耦合
thisisll 2005-12-13
  • 打赏
  • 举报
回复
他应该说的是这段代码怎么简化吧

你的代码那些if间应该是互斥的吧,进了其中一个后其他的就进不去了
要不然opMod这个就重复定义了
那你可以把这些if写到一起
if
else if
else if
...
else
j805 2005-12-12
  • 打赏
  • 举报
回复
只想--->指向
j805 2005-12-12
  • 打赏
  • 举报
回复
在CBase中加入虚函数addData();edtData();getMessage();
在COnDuty, CMemo, CNotice, CWeekReport中实现,然后用只想基类的指针访问派生类的函数.(多态)

至于你的问题怎么简化,信息太少,我看不出来.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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