使用引用返回类对象本身

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.

相关推荐
caimouse9 分钟前
ReactOS 窗口系统分析(13):滚动条 — scrollbar.c + scrollex.c
c语言·开发语言·reactos
Sagittarius_A*9 分钟前
【好靶场】PHP反序列化入门练习2
开发语言·web安全·信息安全·php·代码审计·反序列化
郝学胜-神的一滴11 分钟前
Horse3D 游戏引擎研发笔记(七):Clydesdale——从流式日志到多输出订阅
c++·qt·unity·游戏引擎·图形渲染·unreal engine·opengl
sel_915 分钟前
【Docker】Docker 安装与使用详解:从零搭建到日常实战
人工智能·深度学习·算法·docker
NoteStream25 分钟前
MATLAB绘制带置信区间的折线散点图(科研绘图模板)
开发语言·matlab
tianyu2342 小时前
Java 正则表达式终极指南:从 Pattern 到 Matcher,从双重转义到性能优化,一篇全搞定
java·开发语言·正则表达式·group·find·pattern·matcher
caimouse3 小时前
ReactOS 窗口系统分析(23):键盘 — keyboard.c + kbdlayout.c
c语言·开发语言·计算机外设
Emily156853598704 小时前
Emerson 1C31129G03 Analog Input Module
java·开发语言·前端·plc·emerson·1c31129g03·input module
就叫_这个吧8 小时前
Java递归方法实现面包屑导航
java·开发语言
小O的算法实验室9 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法