我试图从我的基类的对象访问派生类的方法。我有一个基础类CBase,它是一个抽象类,

    class CBase{
protected:
    char path[255];
public:
    virtual void StartBackup()=0;
    void setpath(char * path)
    {
        strcpy(this->path,path);
    }
    virtual void afunc()
    {
        printf("Base\n");
    }

};

现在,两个类Ctype1和Ctype2是CBase的派生类
    class CType1:public CBase{
public:
    void StartBackup()
    {
        printf("Type1:%s",path);
    }
    void afunc()
    {
        printf("CType1:afunc\n");
    }
    void myfunc()
    {
        printf("myfunc\n");
    }
};

class CType2:public CBase{
public:
    void StartBackup()
    {
        printf("Type2:%s",path);
    }
    void afunc()
    {
        printf("type2:afunc\n");
    }
    void typefunc()
    {
        printf("typefunc\n");
    }
};

我有一个CManager类,它具有一个CBase类的对象作为其成员,
    class CManager{
private:
    CBase * obj;
public:
    CManager(){
        obj = NULL;
    }
    ~CManager(){
        if(obj)
            delete obj;
        obj = NULL;
    }
    void inittype(int type)
    {
        if(type == 1)
        {
            obj = new CType1();
            obj->myfunc();
        }
        else
        {
            obj = new CType2();
            obj->typefunc();
        }

    }
};

void inittype(int type)函数中,我将输入作为类型并相应地初始化CBase对象。

我面临的问题是,在创建对象后,当我尝试访问myfunctypefunc时,出现编译错误。如何访问这些函数(我不想在基类中创建这些函数)?

编辑:

我收到的错误是,
  • 'myfunc':不是'CBase'
  • 的成员
  • 'typefunc':不是'CBase'
  • 的成员

    谢谢

    最佳答案

    如果您只需要在创建时访问类的非派生函数,则可以使用

    void inittype(int type)
    {
        if(type == 1)
        {
            CType1* temp = new CType1();
            temp->myfunc();
            obj = temp;
        }
        else
        {
            CType2* temp = new CType2();
            temp ->typefunc();
            obj = temp;
        }
    }
    

    如果您需要在其他时间访问这些成员函数,则需要使用强制转换-例如
    CType2* child = dynamic_cast<CType2*>(obj);
    

    09-20 15:01