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

原创 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

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

相关文章推荐

空指针可以调用成员函数?

有下面一个简单类:class A { public: void fun(){ cout << "I'm class A"<fun();讲道理,空指针应当是”不可用”的,自然也不...

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

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

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

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

空指针调用成员函数

试分析一下代码的运行情况即输出:#include using namespace std; class A { public: int m; void print() { co...

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

转载自:http://hi.baidu.com/sangwf/blog/item/0be10af482d0c46edcc47464.html   我一直认为技术是没有止境的,不管你怎么去学,总有你...

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

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

空指针调用成员函数

看下面一段代码:

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

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

关于空指针类型的类变量的成员函数访问的问题

下面代码会有什么输出? #include using namespace std; class A { public: void fun() { cout<<"fun"<...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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