使用引用返回类对象本身

cpp 复制代码
#include<iostream>
#include<ctime>
using namespace std;
class Person
{
public:
	//Person()
	//{
	//	cout << "构造函数调用"<<endl;
	//}
	Person(int age)
	{
		this->age = age;
		cout << "有参构造函数调用" << endl;
	}
	Person(const Person& p1)
	{
		this->age = p1.age;
		cout << "拷贝构造函数调用" << endl;
	}
	~Person() {
		cout << "析构函数被调用" << endl;
	}
	int age;
	//f
	Person addAge(const Person &p) //使用引用传递类对象 节省空间
	{
		this->age += p.age;
		return *this;//返回正在操作的对象 为链式编程提供条件
	}
};
Person test01()
{
	Person p1(18);
	Person p2 = p1;
	//p2.addAge(p1);
	p2.addAge(p1).addAge(p1);
	cout << p2.age << endl;
	return p2;
}

int main()
{
	test01();
	return 0;
}

其中

cpp 复制代码
	Person addAge(const Person &p) //使用引用传递类对象 节省空间
	{
		this->age += p.age;
		return *this;//返回正在操作的对象 为链式编程提供条件
	}
cpp 复制代码
	Person& addAge(const Person &p) //使用引用传递类对象 节省空间
	{
		this->age += p.age;
		return *this;//返回正在操作的对象 为链式编程提供条件
	}

第一个函数返回一个新的Person对象,它的年龄是原Person对象的年龄加上传入Person对象的年龄,但是返回的是值类型,每次调用都会创建一个新的对象,比较浪费空间。

第二个函数返回一个对正在操作的Person对象的引用,它的年龄是原Person对象的年龄加上传入Person对象的年龄,这样可以避免创建新的对象,节省空间。此外,它还可以用于链式编程,即一个函数返回一个对象的引用,这个对象又可以调用另一个函数,依次进行链式操作。

结果:第一种方式输出36,第二种方式输出54.

相关推荐
To_OC7 小时前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
金銀銅鐵11 小时前
[Python] 扩展欧几里得算法
python·数学·算法
To_OC13 小时前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
郝学胜_神的一滴18 小时前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
To_OC1 天前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
05Kevin2 天前
lk每日冒险题--数据结构6.27
算法
To_OC2 天前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
千纸鹤安安2 天前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法