使用引用返回类对象本身

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.

相关推荐
rqtz2 分钟前
【C++】揭秘工程实践:Boost 源码编译与 CMake 环境搭建的具体流程
开发语言·c++·网络编程·boost
Yupureki4 分钟前
《Linux系统编程》19.线程同步与互斥
java·linux·服务器·c语言·开发语言·数据结构·c++
96777 分钟前
C++ Lambda 表达式 匿名函数 sort
数据结构·c++·算法
艾莉丝努力练剑9 分钟前
【Linux信号】Linux进程信号(下):可重入函数、Volatile关键字、SIGCHLD信号
linux·运维·服务器·c++·人工智能·后端·学习
codeの诱惑12 分钟前
推荐算法(二):核心概念——余弦定理 & 余弦相似度
算法·机器学习·推荐算法
FL162386312916 分钟前
基于C#winform部署RealESRGAN的onnx模型实现超分辨率图片无损放大模糊图片变清晰
开发语言·c#
liuyao_xianhui17 分钟前
优选算法_锯齿形层序遍历二叉树_队列_C++
java·开发语言·数据结构·c++·算法·链表
si莉亚17 分钟前
2026.3.31成功安装Ubuntu22.04+ROS2记录
linux·c++·开源
秃头狂魔26 分钟前
【HOT100】DAY2
python·算法
想带你从多云到转晴32 分钟前
03、数据结构与算法--单向链表
java·数据结构·算法