关于指向空的对象指针可以访问类的不包含成员变量的成员函数的原因
2016-04-26 18:20
316 查看
#include <iostream> using namespace std; class A { int a; int b; public: void print(){ cout << "abcd"; } void print_a(){ cout << a << endl; } }; int main(void) { A *a = NULL; a->print(); //可以运行 a->print_a();//出现段错误 return 0; }
暂时理解为以下:
可以参考python的方法来进行理解:
python 定义一个成员函数的方法为:print(self)
而通过对象调用该函数的时候通过a.print()来调用。也就是将对象a传入到print的self参数中。
再转回来:
c++中,每个对象都拥有一份独立的成员变量空间。而对于成员函数,并不是每个对象都拥有一份成员函数体而是所有的对象共用一份成员函数,程序编译之后,成员函数的地址就已经确定。成员函数的非虚函数由调用该函数的对象类型或者指针类型决定调用基类还是子类的函数块,然后直接进行调用,如果该函数用到了对象的成员变量,那么当遇到该变量时,将该变量自动转换为this->变量。
这是整个调用过程。
那么对于上述问题,指向空的对象指针,是可以调用该类的非静态且不包含成员变量的函数(不需要this指针)。然而当遇到成员变量后,调用该对象的this指针,为空,会出现段错误。
暂时做一下笔记,发现一篇博客比我这个解释清楚多了,介绍给大家:http://blog.csdn.net/starlee/article/details/2062586
相关文章推荐
- 字符串和整数转换
- 剑指offer(26):二叉树中和为某一值的路径
- 事务隔离级别
- Android中关于保留小数点位数的处理
- Unity3D学习笔记(9)—— 粒子光环
- Hdu 5586 sum【最大连续子序列和】
- 类的定义和继承
- nyoj 113 字符串替换<南阳oj 100道>
- JavaScript 进阶学习 2 数组
- python爬虫学习--pixiv爬虫(4)--代码优化
- 使用highchart无数据时的样式
- C++第四次作业
- group by显示最新的一条数据
- Selenium WebDriver 中鼠标和键盘事件分析及扩展[转载]
- 模拟手机号码抽奖活动
- 《第一行代码》学习笔记之asynctask的四个重写方法
- php自学提升进阶路线
- 蓝色妖姬 t3200 linux连接
- C++中构造函数与析构函数的调用顺序
- python import 缺少解决方案