P10-c++对象和类-03this指针详细介绍,详细的例子演示

文章目录

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作为调用对象的别名来完成前面的方法定义。

猜你喜欢

转载自blog.csdn.net/sgy1993/article/details/113575815