C++ 如何从C+中的静态成员函数访问非静态成员+;?
我编写了以下代码:C++ 如何从C+中的静态成员函数访问非静态成员+;?,c++,oop,static-members,C++,Oop,Static Members,我编写了以下代码: class A { public: int cnt; static void inc(){ d.cnt=0; } }; int main() { A d; return 0; } 我看到这个问题: 但我不想使用指针。我可以不用指针吗 编辑: 我看到了以下问题: 为什么我不能这样做?不,如果没有指向对象实例的指针,就无法从静态函数调用非静态成员函数。否则编译器怎么知道调用函数的对象呢?不,如果没有指向对象实例的
class A
{
public:
int cnt;
static void inc(){
d.cnt=0;
}
};
int main()
{
A d;
return 0;
}
我看到这个问题:
但我不想使用指针。我可以不用指针吗
编辑:
我看到了以下问题:
为什么我不能这样做?不,如果没有指向对象实例的指针,就无法从静态函数调用非静态成员函数。否则编译器怎么知道调用函数的对象呢?不,如果没有指向对象实例的指针,就无法从静态函数调用非静态成员函数。否则编译器怎么知道调用函数的对象呢?如果不使用指针,就不能在静态函数中使用非静态成员变量或函数 如果不使用指针,就不能在静态函数中使用非静态成员变量或函数 您本身不需要指针,但需要访问访问非静态变量的对象。在您的示例中,对象d对A::inc()不可见。如果d是一个全局变量而不是main的局部变量,那么您的示例就可以了
你说,你为什么想去避免在C++中使用指针,这是很奇怪的。
< P>你不需要指针本身,但是你确实需要访问你访问非静态变量的对象。在您的示例中,对象d对A::inc()不可见。如果d是一个全局变量而不是main的局部变量,那么您的示例就可以了这是很奇怪的,为什么你想做任何努力避免在C++中使用指针。
< P>就像其他人指出的,你需要访问一个对象,以便对它执行操作,包括访问它的成员变量。 从技术上讲,您可以编写下面我的zeroBad()
函数之类的代码。但是,由于您无论如何都需要访问该对象,因此不妨将其作为成员函数,如zeroGood()
:
更新:
也可以在C++中实现
zeroBad()
函数之类的代码。但是,由于您无论如何都需要访问该对象,因此不妨将其作为成员函数,如zeroGood()
:
更新:
也可以在C++中实现
这里一个更重要的问题是:你为什么要这样做?@Lstor因为我想学习。你想访问哪种类型的A对象?你可以将它包含在inc(param)的参数中
的参数中。这个有用法,这个有用法,
inc(param)
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
}