在静态create方法中从基类调用非静态方法

时间:2014-10-27 16:09:17

标签: c++

我想编写一个静态create方法,我从基类中调用非静态方法。

<BaseClass.h>

class BaseClass
{
public:
    void method();
}

<MyClass.h>

class MyClass : public BaseClass
{
    static MyClass* createMyClass();
}

<MyClass.cpp>

...
MyClass* MyClass::createMyClass()
{
    MyClass* myclass = new MyClass();
    method(); // Error, illegal call of non-static member function
    return myclass;
}
...

所以我必须在createMyClass方法之外调用我的基类方法,还是有可能在里面调用它?

1 个答案:

答案 0 :(得分:7)

需要在实例上调用非静态方法,并且编译器不会假装足够聪明,无法知道要在其上调用哪个实例(除非您在实例方法中)。您需要在刚刚创建的MyClass实例上显式调用该方法:

myclass->method();

(另一种思考方式:在非静态上下文中,使用语法method();调用方法相当于this->method();。因为你没有“this”在静态环境中,您需要自己提供“this”。)