我认为我不能使用静态指针来调用非静态函数,因为我认为静态指针属于整个类,但非静态函数属于特定的对象。但是我以某种方式使它成功了,并且不确定为什么会这样。

这是我的代码:

#include <cstdio>

class B
{
public:
    void show(int aValue);
};

//B.cpp
void B::show(int aValue)
{
    if (aValue == 100)
        printf("This is the desired value");
    else
        printf("This is not the desired value");
}

class A
{
private:
    static B* mUpdater;
public:
    static int function1();
};

B* A::mUpdater = new B();
int A::function1()
{
    int final = 100;
    mUpdater->show(final); // mUpdater is a static pointer, show is a non-static function
    return 1;
}


int main()
{
    return !A::function1();
}

代码运行,并打印“这是所需的值”。但是我有点困惑,因为我认为代码无法运行。这是因为我将特定对象的地址分配给了指针,以便它可以工作吗?还是在任何情况下,静态指针都只能调用非静态函数?

任何想法都将不胜感激。

最佳答案

(假设B继承自A(请参见问题注释)。)
static成员函数意味着您不能使用类/对象的this指针。在A::function1()中,您不使用this -pointer。而是调用一个实际实例(为B)的函数,该函数可能是静态的,也可能不是静态的。是否通过静态/非静态指针/引用访问该实例都没有关系。因此,您的用法是有效的。

但是,您的代码很困惑。您的show()函数无论如何都不会使用该类的任何变量,因此它也可能是静态的。同样,使用指向B类型的另一个对象的指针从A的静态成员函数调用非静态成员函数似乎也不可行。当您期望使用某种B实例的数据时,您可能最终会使用某种A实例的数据。

关于c++ - 为什么我可以通过静态指针调用非静态函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35065191/

10-11 22:25
查看更多