本文共 1387 字,大约阅读时间需要 4 分钟。
假设有下面一段代码,Demo类的构造函数 的形参名和成员变量名一样,会出现什么问题?
#include/* author:梦悦foundation 公众号:梦悦foundation 可以在公众号获得源码和详细的图文笔记*/using namespace std;class Demo { private: int iDemo;public: Demo(int iDemo); void Show();};Demo::Demo(int iDemo){ iDemo = iDemo;}void Demo::Show(){ cout << "iDemo:" << iDemo << endl;}int main(int argc, char *argv[]) { cout << "---------------开始--->公众号:梦悦foundation---------------" << endl; Demo d1(2); d1.Show(); cout << "---------------结束--->公众号:梦悦foundation---------------" << endl; return 0;}
本来调用 Demo d1(2)
是期望将iDemo这个成员变量的值设置为2的,但是实际的打印结果:
meng-yue@ubuntu:~/MengYue/c++/object_class/03$ ./this_pointer---------------开始--->公众号:梦悦foundation---------------iDemo:32764---------------结束--->公众号:梦悦foundation---------------meng-yue@ubuntu:~/MengYue/c++/object_class/03$
发现结果不是我们预期的
c++给出的解决方案是this 指针
,代表的是当前访问的对象 所以讲上面的构造函数赋值语句改成下面这样,就可以了 this->iDemo = iDemo;
编译运行的结果!
meng-yue@ubuntu:~/MengYue/c++/object_class/03$ ./this_pointer---------------开始--->公众号:梦悦foundation---------------iDemo:2---------------结束--->公众号:梦悦foundation---------------meng-yue@ubuntu:~/MengYue/c++/object_class/03$
注意:
每个成员函数(包括构造函数和析构函数)都有一个this 指针。 this指针指向调用对象。 如果方法需要引用整个调用对象,则可以使用表达式*this
。 在函数的括号后面使用const 限定符将 this限定为const,这样将不能使用this来修改对象的值。然而,要返回的并不是this,因为this是对象的地址,而是对象本身,即*this(将解除引用运算符*用于指针,将得到指针指向的值)
。现在,可以将*this作为调用对象的别名来完成前面的方法定义。 转载地址:http://qeyci.baihongyu.com/