静态成员从C ++中的静态成员函数?

我写了下面的代码:

class A
{
    public:
    int cnt;
    static void inc(){
        d.cnt=0;
    }
};

int main()
{
   A d;
   return 0;
}

我看到了这个问题:

如何在不传递类实例的情况下从静态成员函数中调用非静态成员函数

但我不想使用指针。 我可以不使用指针吗?

编辑:

我看到了以下问题:

如何从Java中的静态方法访问非静态成员?

为什么我不能做这样的事情?


不,从没有指向对象实例的指针,无法从静态函数调用非静态成员函数。 编译器如何知道调用函数的对象?


与其他人指出的一样,您需要访问一个对象才能对其执行操作,包括访问其成员变量。

你可以在技术上编写如下我的zeroBad()函数的代码。 但是,由于无论如何您都需要访问该对象,因此您可以将其设置为成员函数,如zeroGood()

class A
{
    int count;

public:
    A() : count(42) {}

    // Zero someone else
    static void zeroBad(A& other) {
        other.count = 0;
    }

    // Zero myself
    void zeroGood() {
        count = 0;
    }
};

int main()
{
    A a;

    A::zeroBad(a); // You don't really want to do this
    a.zeroGood();  // You want this
}

更新:

你也可以在C ++中实现Singleton模式。 除非你有一个非常具体的原因,你可能不想那么做。 单身人士被许多人认为是反模式,例如因为它很难测试。 如果你发现自己想要这样做,重构你的程序或重新设计可能是最好的解决方案。


不能使用指针,不能在静态函数中使用非静态成员变量或函数。

链接地址: http://www.djcxy.com/p/96371.html

上一篇: static member from a static member function in C++?

下一篇: Accessing class member from static method