class test
{
static void fun()
{
cout<<"test fun\n";
}
};
test *p=NULL;
p->fun();
调用没有问题,因为静态成员函数是属于类的,不需要类的实例就能直接调用,上述p类指针只是其中的一种调用方式而已,不要混淆了。
另外,其实类成员函数的调用并不直接与类实例指针关联(类成员函数属于类),以test::fun()方式调用
但成员函数内部如果有类成员变量相关的操作,则必须有类实例(有效的this指针)
比如:
1.
class test
{
void fun()
{
cout<<"test fun\n";
}
};
//下面的调用没有问题
test *p = NULL;
p->fun();
上面的类方法fun虽然不是静态函数,但调用还是没有问题,因为函数内部没有相关this指针的部分。
2.
class test
{
void fun()
{
i += 2;
cout<<"test fun\n";
}
int i;
};
//下面的调用有问题
test *p = NULL;
p->fun();//执行i += 2时由于this指针为空,不能正常调用
转载于:https://blog.51cto.com/zygjsvip/985477