1

看看下面的一段代码。

//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 数组以实现运行时多态性是否有任何缺陷?这个逻辑有什么问题吗?

4

1 回答 1

0

我只看到一个问题:您ParseInputCmd在派生类中未使用的基类中添加了特定功能 ()。

创建一个派生类CompositeParser_c : public CmdParser_c { ... } ,然后在CompositeParser_c::ProcessInputCmd()方法中调用其他具体的解析器。

于 2013-11-08T21:13:39.120 回答