考虑以下代码:

class Bas
{
    public:
        virtual void test() = 0;
};
class Sub : public Bas
{
    public:
        void test(){};
        void subfunc(){};
};
int main()
{
    Bas * bs = new Sub();
    bs->test();
    bs->subfunc(); //Gives error
    return 0;
}

为什么不能在这里使用多态?我的意思是,对象bs的类型为Bas和Sub,为什么只能使用Bas中的函数?

最佳答案

您只能使用基类指针获得在基类中定义的那些函数。您的基类没有subfunc(),这就是为什么您会出错。以下代码可能适合您

class Bas
{
public:
    virtual void test() = 0;
    virtual void subfunc(){};
};

class Sub : public Bas
{
public:
    void test(){};
    void subfunc(){};
};

int main()
{
    Bas * bs = new Sub();
    bs->test();
    bs->subfunc();
    return 0;
}

10-08 20:05