c++静态成员函数里 为何不能使用成员变量this指针?

为何不能使用?有人说是因为,静态里没有this参数。

但是,成员函数里没有成员变量的参数,却能直接使用成员变量,这是为何?

比如 cl ass a
{
public:
int a;

f()
{
a = 1 ; // 成员函数里没有a对应的参数,却能直接使用a

}

}

成员函数里没有a对应的参数,却能直接使用a
那为何静态成员函数里,不能直接使用成员变量this ?

static 成员,是在类的实力没有创建前就存在的。
其他的成员必须是在类的实例创建才存在。
例如:
class A {
public:
static int a;
static void func() {//静态函数在类的实例创建之前就存在的, 在实例创建之前,根本没有为b开辟空间

printf("%d", b);// 这个是错误的,因为类的实例还没有创建,不存在b

}

int b;

};
int A::a = 5;

int main()
{
printf("%d\n", A::a);// 这个是可以的,这个时候this指针是没有指向任何实例的,可以认为是NULL,另外this是私有的指针,不可能在外部使用的。

A m;//创建了一个类的实例, 这个时候b才被分配空间,才有一个this指针指向它。

printf("%d\n", m.b);

return 0;

}追问

就是说,静态成员函数里,不能对非静态成员变量进行操作?

追答

是的

追问

汗,书上例子中,直接用getwindowlong来获取this指针,放在静态回调成员函数中,这又是怎么回事?

能留个qq看下例子么?提问里说不清啊,已经私信您

追答

比如有总统这个类,

#include
class President {
public:
President(const std::string &name) ;
void show_name();
private:
std::string m_name;
};
这个类的实现很容易如下:
#include "person.h"
#include
using namespace std;
President::President(const string& name) {
m_name = name;
}
void
President::show_name() {
cout
using namespace std;
static President* _thePresident = NULL;
President::President(const string& name) {
_thePresident = this;
m_name = name;
}
void
President::show_name() {
coutshow_name();
}
那么回调函数可以写成:
void show_president_name(void) {
President::who();
}

这里的get_president()的用法和你的getwindowlong
类似。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-20
静态成员是共享的。所以没有this,大家共享一个变量,它不属于任何一对象。追问

那静态成员里面,能否直接使用成员变量?

追答

可以通过成员变量,或则函数更改静态成员。

相似回答