看看下面的代码。
//Base Cls declaration:
class CmdParser_c
{
public:
CmdParser_c(){}
virtual ~CmdParser_c(){}
BOOLEAN ParseInputCmd(UINT8*);
virtual BOOLEAN ProcessInputCmd(UINT8* );
virtual BOOLEAN ProcessInputCmdArgs(UINT8* cmdList_ptr, UINT8 noOfArgs);
}
//One of its member function definition:
BOOLEAN CmdParser_c::ParseInputCmd(UINT8* cmdBuff_ptr)
{
CmdParser_c *tstObj[MAX_PARSERS]; // <-- creating array of base cls ptr
RTCcmdParser_c rtcTstObj;
UiParser_c uiP;
tstObj[0] = &rtcTstObj; // <-- assigning child1 cls obj
tstObj[1] = &uiP; // <-- assigning child2 cls obj
if (tstObj[0]->ProcessInputCmd(&inputCmd_ptr[0][0]))
{
// do something
}
else if (tstObj[1]->ProcessInputCmd(&inputCmd_ptr[0][0]))
{
// do something
}
}
代码正在运行。没问题。我的问题是,在为自己的成员函数创建运行时多态性的类中创建ptr数组有什么缺陷吗?这个逻辑有什么问题吗?
答案 0 :(得分:0)
我只看到一个问题:您向基类中添加了特定功能(ParseInputCmd
),而这些功能未在派生类中使用。
创建派生类CompositeParser_c : public CmdParser_c { ... }
然后使用CompositeParser_c::ProcessInputCmd()
方法调用其他具体解析器。