从静态创建方法中的基类调用非静态方法

Call non-static method from base class in static create method

本文关键字:基类 调用 静态方法 静态 创建 方法      更新时间:2023-10-16

我想写一个静态创建方法,从基类调用一个非静态方法。

<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方法之外调用基类方法吗?或者有任何可能的方法在内部调用它吗?

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

myclass->method();

(另一种想法是:在非静态上下文中,使用语法method();调用方法相当于this->method();。由于在静态上下文中没有"this",因此需要自己提供"this"。)