当指针并没有指向实际的对象时,能否调用对象的成员函数
来源:互联网 发布:985优势学科平台 知乎 编辑:程序博客网 时间:2024/05/16 04:51
先看程序吧:(这也是我遇见的笔试题)
#include <iostream>using namespace std;class Test1{public:void func(){cout<<"Test1"<<endl;}};class Test2{public:Test2(int i = 0):val(i){}void func(){cout<<val<<endl;}private:int val;};class Test3{public:virtual void func(){cout<<"Test3"<<endl;}};int main(void){Test1* p1 = NULL;p1->func();//可以输出,为什么Test2* p2 = NULL;p2->func();//报错,为什么Test3* p3 = NULL;p3->func();//报错,为什么return 0;}
为什么Test1可以输出呢?因为这时并不需要p1的地址,因为Test1中的func函数的地址是固定的,编译器给func传入一个this指针,该指针为NULL,但在p1->func()中this指针没有使用到;这就好比是你给一个函数传递了错误的实参,但是这个对应的型参并没有时函数中被使用一样,不影响输出的结果。
这也就解释了为什么Test2中的不能输出,因为它的func使用了成员变量val,所以如果this指针并没有指向这个对象的话,就不能得到成员变量了,自然会出错。
那么Test3又是为什么呢?因为它有虚函数,所以需要虚函数表,vptr是在构造函数中初始化的,而p2并没有构造,故p2->Func();调用失败。
- 当指针并没有指向实际的对象时,能否调用对象的成员函数
- 指向对象的指针访问成员函数
- C++:指向对象成员函数的指针
- c++指向对象成员函数的指针
- 当父类指针指向子类对象时的函数调用
- 指向对象成员的指针
- 指向对象成员的指针
- C++之指向对象成员函数的指针
- 指向对象成员变量的指针
- C++对象指针—指向对象成员的指针
- 对象指针—指向对象成员的指针
- this指针指向当前调用对象,只是用于类的非静态成员函数。静态函数和全局函数 无当前对象,无this指针。
- 当C++指向对象的指针被赋值为NULL,对象那些函数可以运行?
- 当C++指向对象的指针被赋值为NULL,对象那些函数可以运行?
- 7.22通过指向对象的指针访问对象中的成员
- 用enable_shared_from_this在类的成员函数中获得指向当向前对象的shared_ptr
- 常对象+常对象成员+指向对象的常指针+指向常对象的指针变量+对象的常引用
- 指向对象的指针
- Android主题定制及修改
- PureMVC管道技术
- android proguard混淆apk问题
- Server2003建隐藏管理员用户
- js.offsetParent属性
- 当指针并没有指向实际的对象时,能否调用对象的成员函数
- 查看中兴V880android手机MAC地址的方法
- 美丽女孩优化日志
- 方法调用绑定--前期绑定和后期绑定
- 2012-04-16 09:31 javascript获取浏览器、显示器大小
- 文件io 和 标准io 之间的文件描述符and流的转化
- HKBU Job Opening
- 数据结构 二叉树 索引链表 及其索引话 输出
- 用div控制文字长度,超出范围用...表示