一、概念
是链式编程(Method Chaining)的核心概念
二、例子详解
Person&PersonAddAge(Person &p) {this->age+=p.age; //this指回p2的指针,而*this指回的就是p2这个对象本体 return*this;}为什么需要返回引用?
1.效率考虑
返回引用:不创建新对象,直接操作原对象
返回值:会创建临时副本(拷贝构造),效率低
2.支持链式调用
// 如果不返回引用,而是返回值: Person PersonAddAge(Person &p) { this->age += p.age; return *this; // 返回的是副本! } p2.PersonAddAge(p1).PersonAddAge(p3); // 第二次调用是在临时对象上,不是原来的p2!3.差别:
1)void版本的函数
void PersonAddAge(Person &p) { this->age += p.age; // 只能执行一次操作,不能连续调用 }使用方式:
p2.PersonAddAge(p1); // 执行完就结束了 p2.PersonAddAge(p3); // 需要再写一行2)Person&版本的函数
Person& PersonAddAge(Person &p) { this->age += p.age; return *this; // 返回对象本身的引用 }使用方式(链式调用):
p2.PersonAddAge(p1).PersonAddAge(p3).PersonAddAge(p4); // 可以连续调用,从左到右执行三、总结
| 返回类型 | 特点 | 能否链式调用 |
|---|---|---|
void | 只执行操作 | ❌ 不能 |
Person | 返回副本 | ⚠️ 可以但操作的是副本 |
Person& | 返回自身引用 | ✅ 可以且操作原对象 |
关键点:
返回引用是为了操作原对象,不是创建新对象
链式编程让代码更简洁、可读
*this返回的是当前对象的引用这是面向对象编程中常见的设计模式