在其成员函数内创建指向类的指针以实现多态

时间:2013-09-04 13:22:42

标签: polymorphism

看看下面的代码。

//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数组有什么缺陷吗?这个逻辑有什么问题吗?

1 个答案:

答案 0 :(得分:0)

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

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