关于指向空的对象指针可以访问类的不包含成员变量的成员函数的原因
来源:互联网 发布:淘宝放单群 编辑:程序博客网 时间:2024/05/17 02:24
#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
0 0
- 关于指向空的对象指针可以访问类的不包含成员变量的成员函数的原因
- 指向对象的指针访问成员函数
- 关于空指针类型的类变量的成员函数访问的问题
- 指向对象成员变量的指针
- C++:指向对象成员函数的指针
- c++指向对象成员函数的指针
- 指向成员函数的指针类型成员变量
- 指向对象成员的指针
- 指向对象成员的指针
- 函数指针,指向成员函数的指针与指向成员变量的指针
- 指向成员函数的指针
- 指向成员函数的指针
- 指向成员函数的指针
- 指向成员函数的指针
- 指向成员函数的指针
- 指向成员函数的指针
- 指向成员函数的指针
- 指向成员函数的指针
- 大数相减
- android 批量打包
- 【数字图像处理】利用霍夫变换检测圆形
- c++第四次作业
- atoi函数
- 关于指向空的对象指针可以访问类的不包含成员变量的成员函数的原因
- 字典树Trie树
- Java 集合系列02之 Collection架构
- win8短路径不能识别
- MyBatis和Hibernate相比
- Android面试经过
- Android图片的三级缓存机制之从网络中获取图片
- Java线程唤醒与阻塞
- BZOJ1178: [Apio2009]CONVENTION会议中心