空指针也能调用成员函数?

原创 2016年05月30日 13:35:16

    最近各大公司都在招聘实习生,昨晚,微信公众号推送了网易的笔试题让小伙伴们参考,看了第一道题,博主就觉得“嗯,我果然还是见识短哈!”为什么呢,我们先看看这个代码~

class cal
{
public:
	void show()
	{
		cout << "cal::Show()" << endl;
	}

};
int main()
{
	cal *pcal = NULL;
	pcal->show();
	getchar();
	return 0;
}
#endif

Q;该程序输出的结果什么?

博主毫不犹豫的选择了“运行时崩溃”这个选项

然而。。。。真正的答案却是这个指针可以正确的调用show()函数。。what?!why?!这不科学

怀着对科学严谨的态度(我要吐了)B_0061.gif,博主还是去别的大大的博客转了一圈。诶!?还真被我找到了,这到底是为什么呢?

我们现在再看一段代码!

class cal
{
public:
	cal() :a(10)
	{}
	void display()
	{
		cout << a << endl;
	}
private:
	int a;
};
int main()
{
	cal *pcal = NULL;
	pcal->display();
	getchar();
	return 0;
}
#endif

和上面的那段代码很像吧,但是呢,这段代码在运行的时候是会崩溃的,为什么呢!?

    仔细的你发现了没,上面第一段代码里,指针调用的函数没有用到this指针,而这一段里用到了,所以关键就在于你是否用到了this指针。

    这是因为,我们在编写一个类的时候,它的所有的对象共用了成员函数,所以在编译期间我们就已经确定了成员函数的地址,而类又依靠this指针来区分各个不同的对象以便于找到正确的数据。对于第一个例子,它的this指针就等于NULL而show()是一个静态类型的成员函数,在调用时不会传this指针给它,所以我们可以顺利的调用它,但是第二个例子中我们用到了类的数据a在调用时被编译器解释为this->a ,但是你得this是NULL啊,你指什么啊!?

    所以,你明白了吗。。。

本文出自 “Zimomo” 博客,请务必保留此出处http://zimomo.blog.51cto.com/10799874/1755456

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

匈牙利与骆驼与帕斯卡命名方法比较

一、匈牙利命名法:广泛应用于象Microsoft Windows这样的环境中。       Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的 Mic...

【大话QT之八】模拟QQ系统设置面板实现功能

业务需求:          基于网盘客户端的实现,原有网盘的设置面板无论从界面显示还是从业务需求都不能满足我们的正常需求。当前的要求是,模拟QQ系统设置的面板实现当前我们网盘中的基本配置功能。在完...

C++调用空指针对象的成员函数——静态绑定与动态绑定

最近代码中看到调用空指针对象的成员函数的写法,联想起上次碰到的问题:C++类的成员函数存储方式(是否属于类的对象)两者的本质是一样的,上次只是简单地讨论了下,这次从编译器的角度,来谈一谈这个知识点。一...

为什么通过空指针(NULL)可以正确调用一些类的成员函数?

原文:http://blog.csdn.net/starlee/article/details/2062586 有下面的一个简单的类: class CNullPointCall { ...
  • g5dsk
  • g5dsk
  • 2011年11月27日 20:02
  • 5146

为什么通过空指针(NULL)可以正确调用一些类的成员函数?

原文:http://blog.csdn.net/starlee/article/details/2062586 有下面的一个简单的类: class CNullPointCall ...
  • ywh147
  • ywh147
  • 2012年08月29日 22:05
  • 1508

空指针调用成员函数

看下面一段代码:

空指针为什么能调用成员函数?(转载)

发现了一个空指针调用函数成功的例子,很奇怪就查了一下资料,如下: 举个简单的例子,假如有如下的一段代码: class MyClass { public: int i; void...

浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?

http://blog.csdn.net/starlee/article/details/2062586    有下面的一个简单的类: class CNullPointCall...

浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?

http://blog.csdn.net/starlee/article/details/2062586    有下面的一个简单的类: class CNullPointCall ...
  • gzzheyi
  • gzzheyi
  • 2014年09月10日 21:26
  • 937

C++类对象空指针访问成员函数(静态绑定)

题目:class A{ public: void test(){printf("test A");} }; int main(){ A*pA=NULL; pA->tes...
  • hyqsong
  • hyqsong
  • 2016年08月06日 16:08
  • 573
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:空指针也能调用成员函数?
举报原因:
原因补充:

(最多只允许输入30个字)