#include <iostream>
using namespace std;
/************************************************************************
由于成员函数不占用对象空间大小,非静态成员函数只会诞生一份函数实例,多个同类型对象共用一块代码
如何区分哪个对象调用自己的呢
this指针隐含在每一个非静态成员函数内,指向被调用成员函数所属的对象
this指针用途
1.当形参和数据成员变量同名时,可以使用this指针来区分;
2.在类的非静态成员函数返回对象本身,可以使用return *this
/************************************************************************/
class Person{
public:
Person(int age)
{
//age = age; //发现输出是一个未初始化的未知值
this->age = age; //this指针指向的是被调用成员函数所属对象
}
int get_value()
{
return age;
}
//返回引用
Person& get_person_age(const Person &per)
{
this->age += per.age;
return *this;//this是指向被调用成员函数所属对象,*this是被调用成员函数对象本身
}
//返回对象
Person get_person_age1(const Person &per)
{
this->age += per.age;
return *this;//返回的是一个对象
}
private:
int age;
};
void test1()
{
Person per(10);
cout<<"age:"<<per.get_value()<<endl;
Person per1(10);
//链式编程
per1.get_person_age(per).get_person_age(per).get_person_age(per);
cout<<"age:"<<per1.get_value()<<endl;//输出40
Person per2(10);
per2.get_person_age1(per).get_person_age1(per).get_person_age1(per);
cout<<"age:"<<per2.get_value()<<endl;//输出20,原因是get_person_age1返回一个对象,该对象和per2是没有关系的,除了第一次per2对象值发生改变
Person per3(10);
cout<<"age:"<<per3.get_person_age1(per).get_person_age1(per).get_person_age1(per).get_value()<<endl;//输出40
}
int main()
{
test1();
return 0;
}
C++ 非静态成员函数中隐含的this指针
最新推荐文章于 2022-03-23 19:56:54 发布