文章目录
1. this指针的作用
假设有下面一段代码,Demo类的构造函数 的形参名和成员变量名一样,会出现什么问题?
#include <iostream>
/*
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作为调用对象的别名来完成前面的方法定义。