[地址][指针]疑点:为什么一个空指针可以调用类的静态方法
[地址][指针]疑问:为什么一个空指针可以调用类的静态方法?
如下代码
(tamce::conio是我在tamce命名空间内定义的一个类,showHello()为静态成员,输出Hello)
运行结果:
输出Hello
运行结果:0
这是怎么回事?为什么对一个空指针解引用就可以调用类的静态方法?
------解决思路----------------------
静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。
而使用空指针访问,是因为这个函数地址本来就在内存中存在
------解决思路----------------------
class A
{
publice:
void func(){};
}
main()
{
A* p =0;
p->func();//完全没有问题
}
------解决思路----------------------
函数代码本身就不在类里,空指针又能如何?只要不去访问成员变量就没问题~~
如同3楼的解释,即便不是静态方法也一样的
------解决思路----------------------
非静态方法可以访问了成员变量。
如下代码
(tamce::conio是我在tamce命名空间内定义的一个类,showHello()为静态成员,输出Hello)
(*((tamce::conio *)((void *)(0)))).showHello();
运行结果:
输出Hello
std::cout << ((tamce::conio *)((void *)(0)));
运行结果:0
这是怎么回事?为什么对一个空指针解引用就可以调用类的静态方法?
------解决思路----------------------
静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。
而使用空指针访问,是因为这个函数地址本来就在内存中存在
------解决思路----------------------
class A
{
publice:
void func(){};
}
main()
{
A* p =0;
p->func();//完全没有问题
}
------解决思路----------------------
函数代码本身就不在类里,空指针又能如何?只要不去访问成员变量就没问题~~
如同3楼的解释,即便不是静态方法也一样的
------解决思路----------------------
非静态方法可以访问了成员变量。