一、this指针
引言:
首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。
定义:
在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。
注意事项:
1、this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于使用this指针的成员函数类型以及对象类型,
2、this指针在成员函数的开始执行前构造的,在成员的执行结束后清除。
/* 2022 04 05 */
/* this 指针 出现背景: */
// 当成员函数的形参名字和数据成员相同的时候,容易产生二义性
// this指针 通指 所有对象本身 的地址
// 对象存在,this指针才能存在
/* this 指针定义 */
// 在C++中,每一个对象都能通过 this 指针来访问自己的地址。
// this指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。
#include<iostream>
#include<string>
using namespace std;
class GrilFriend
{
public:
// 当成员函数的形参名字和数据成员相同的时候,容易产生二义性
void setData(string name, int age)
{
// 1、类名限定
GrilFriend::name = name;
GrilFriend::age = age;
// 2、用this表示对象的属性
cout << "this= " << "\t" << this << endl;
this->name = name;
this->age = age;
}
void print()
{
cout << "name=" << name << "\t" << "age=" << age<< endl;
}
/* this指针的用途 */
// 1、返回对象本身的成员函数
GrilFriend returnGrilFriend()
{
return *this;
}
// 2、返回对象地址的成员函数
GrilFriend *returnGrilFriendPoint()
{
return this;
}
protected:
string name = "baby";
int age = 18;
private:
};
void test01()
{
GrilFriend xf;
cout << "对象xf的地址:" << &xf << endl;
xf.setData("小芳",20); // this &xf
xf.print();
cout << endl;
GrilFriend baby;
cout << "对象baby的地址:" << &baby << endl;
baby.setData("baby", 22);// this &baby
baby.print();
baby.returnGrilFriend().returnGrilFriend().returnGrilFriend().print();
baby.returnGrilFriendPoint()->returnGrilFriendPoint()->print();
}
int main()
{
test01();
system("pause");
return 0;
}