this指针的使用
c++提供特殊的对象指针,也就是this指针,this指针指向被调用的成员函数所属的对象
this指针是隐含每一个非静态成员函数内的一种指针
this函数不需要定义,直接使用即可
this指针的用途:
- 当形参和成员变量同名时,可用this指针来区分
- 在类的非静态成员函数中返回对象本身,可使用return *this
实例代码1:
#include <iostream> using namespace std; class Person { public: Person(int age) { //this指针指向被调用的成员函数所属的对象 this->age = age; } int age; void PersonAddAge(Person &p) { this->age += p.age; } }; void test01() { Person p1(10); //结果:p1的年龄为:10 cout << "p1的年龄为:" << p1.age << endl; } void test02() { Person p1(10); Person p2(10); p2.PersonAddAge(p1); //结果:p2的年龄为:20 cout << "p2的年龄为:" << p2.age << endl; } int main() { test01(); test02(); }
当返回值为*this时,函数返回当前对象的引用:
实例代码2:
#include <iostream> using namespace std; class Person { public: Person(int age) { //this指针指向被调用的成员函数所属的对象 this->age = age; } int age; //函数返回当前对象的引用 Person &PersonAddAge(Person &p) { this->age += p.age; return *this; } }; void test01() { Person p1(11); //结果:p1的年龄为:11 cout << "p1的年龄为:" << p1.age << endl; } void test02() { Person p1(11); Person p2(11); //链式编程思想 p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1); //结果:p2的年龄为:55 cout << "p2的年龄为:" << p2.age << endl; } int main() { test01(); test02(); }
当函数返回的不是引用而是值:
实例代码3:
#include <iostream> using namespace std; class Person { public: Person(int age) { //this指针指向被调用的成员函数所属的对象 this->age = age; } int age; //函数的返回类型为类的类型,而返回当前对象的引用 Person PersonAddAge(Person &p) { this->age += p.age; return *this; } }; void test01() { Person p1(11); //结果:p1的年龄为:11 cout << "p1的年龄为:" << p1.age << endl; } void test02() { Person p1(11); Person p2(11); //链式编程思想 p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1); //结果:p2的年龄为:22 cout << "p2的年龄为:" << p2.age << endl; } int main() { test01(); test02(); }
图示:
原理:
如果是以值的方式返回,每次都会创建一个新的对象,即每次都会创建一个p2的拷贝,但修改后的数据不会呈现在p2上