C++从超类调用子类方法

Chr*_*Geo 4 c++ class superclass

我有以下样式的代码:

class SubClass;
class SuperClass;

class SuperClass {

private:

    void bar() {

        SubClass().foo();
    }
};

class SubClass : SuperClass {

public:

    void foo() {};
};
Run Code Online (Sandbox Code Playgroud)

所以基本上我有一个SuperClass,我想从中调用子类的方法foo().VS 2012给了我以下错误:

错误1错误C2514:'SubClass':类没有构造函数.

错误2错误C2228:'.foo'的左边必须有class/struct/union.

我想做什么的正确结构是什么?

Kir*_*rov 8

你不能这样做.您必须(至少)在基类中声明该方法.例如:

#include <iostream>

class SuperClass 
{
public:
    void bar() 
    {
        foo();
    }
private:
    virtual void foo() // could be pure virtual, if you like
    {
        std::cout << "SuperClass::foo()" << std::endl;
    }
};

class SubClass : public SuperClass // do not forget to inherit public
{
public:
    virtual void foo() { std::cout << "SubClass::foo()" << std::endl; }
};

int main()
{
    SuperClass* pTest = new SubClass;

    pTest -> bar();

    delete pTest;
}
Run Code Online (Sandbox Code Playgroud)

将打印SubClass::foo().