Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )

【C++】运算符重载 ⑤ ( 一元运算符重载 | 使用 成员函数 实现 前置 ++ 自增运算符重载 | 使用 成员函数 实现 前置 - - 自减运算符重载 )

作者头像
韩曙亮
发布于 2023-10-15 09:25:43
发布于 2023-10-15 09:25:43
22300
代码可运行
举报
运行总次数:0
代码可运行

一、一元运算符重载

1、使用 成员函数 实现 前置 ++ 自增运算符重载

使用 全局函数 实现 前置 ++ 自增运算符重载 :

  • 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载的运算符 , 函数名是 operate++ ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
operate++
  • 然后 , 根据操作数 写出函数参数 , 参数一般都是 对象的引用 ;
    • 成员函数 : 参数是 1个对象的常量引用 , 如 : operate+(const Student& s1)
    • 全局函数 : 参数是 2 个对象的引用 , 如 : operate+(Student& s1, Student& s2)\
    • 此处由于是一元运算符重载 , 只需要对本对象进行操作 , 因此没有参数 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
operator++()
  • 再后 , 根据业务完善返回值 , 返回值可以是 引用 / 指针 / 元素 , 如 : 返回值是元素 Student operate+(Student& s1, Student& s2) ; 此处 , 由于 参数中的 Student& s 中的属性发生了变化 , 返回时仍需要返回 Student& s 参数本身 , 因此返回值是 Student& 引用类型 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Student& operator++()
  • 最后 , 实现函数体 , 编写具体的运算符操作业务逻辑 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	// 使用 成员函数 实现 前置 ++ 自增运算符重载
	// 重载 前置 ++ 运算符
	// 实现 1 个 Student 对象 自增运算
	// 由于 参数中的 Student& s 中的属性发生了变化 
	// 返回时仍需要返回 Student& s 参数本身
	Student& operator++()
	{
		this->age++;
		this->height++;
		// 此处返回引用类型 , 需要对 this 指针进行解包
		return *this;
	};

2、使用 成员函数 实现 前置 - - 自减运算符重载

使用 全局函数 实现 前置 - - 自减运算符重载 :

  • 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载的运算符 , 函数名是 operate-- ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
operate--
  • 然后 , 根据操作数 写出函数参数 , 参数一般都是 对象的引用 ;
    • 成员函数 : 参数是 1 个对象的常量引用 , 如 : operate+(const Student& s1)
    • 全局函数 : 参数是 2 个对象的引用 , 如 : operate+(Student& s1, Student& s2)\
    • 此处由于是一元运算符重载 , 只需要对本对象进行操作 , 因此没有参数 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
operator--()
  • 再后 , 根据业务完善返回值 , 返回值可以是 引用 / 指针 / 元素 , 如 : 返回值是元素 Student operate+(Student& s1, Student& s2) ; 此处 , 由于 参数中的 Student& s 中的属性发生了变化 , 返回时仍需要返回 Student& s 参数本身 , 因此返回值是 Student& 引用类型 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Student& operator--()
  • 最后 , 实现函数体 , 编写具体的运算符操作业务逻辑 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	// 使用 成员函数 实现 前置 -- 自减运算符重载
	// 重载 前置 -- 运算符
	// 实现 1 个 Student 对象 自增运算
	// 由于 参数中的 Student& s 中的属性发生了变化 
	// 返回时仍需要返回 Student& s 参数本身
	Student& operator--()
	{
		this->age--;
		this->height--;
		// 此处返回引用类型 , 需要对 this 指针进行解包
		return *this;
	};

二、完整代码示例

代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "iostream"
using namespace std;

class Student
{
public:
	// 带参构造函数 , 为参数设置默认值
	Student(int age = 1, int height = 1)
	{
		this->age = age;
		this->height = height;
	};

public:
	// 打印类数据
	void print()
	{
		cout << "age = " << age << " , height = " << height << endl;
	};

public:
	// 使用 成员函数 实现 前置 ++ 自增运算符重载
	// 重载 前置 ++ 运算符
	// 实现 1 个 Student 对象 自增运算
	// 由于 参数中的 Student& s 中的属性发生了变化 
	// 返回时仍需要返回 Student& s 参数本身
	Student& operator++()
	{
		this->age++;
		this->height++;
		// 此处返回引用类型 , 需要对 this 指针进行解包
		return *this;
	};

	// 使用 成员函数 实现 前置 -- 自减运算符重载
	// 重载 前置 -- 运算符
	// 实现 1 个 Student 对象 自增运算
	// 由于 参数中的 Student& s 中的属性发生了变化 
	// 返回时仍需要返回 Student& s 参数本身
	Student& operator--()
	{
		this->age--;
		this->height--;
		// 此处返回引用类型 , 需要对 this 指针进行解包
		return *this;
	};

private:
	int age;		// 年龄
	int height;		// 身高
};

int main() {
	// 自定义类型相加
	Student s1(10, 120), s2(18, 170);
	Student s3, s4, s5;

	++s1;
	s1.print();

	--s1;
	s1.print();

    // 控制台暂停 , 按任意键继续向后执行
    system("pause");

    return 0;
};

执行结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
age = 11 , height = 121
age = 10 , height = 120
请按任意键继续. . .
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++/学习】运算符重载&&const成员&&取地址
C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为:关键字operator 后面接需要重载的运算符符号。 函数原型:返回值类型 operator操作符(参数列表)
IsLand1314
2024/10/15
1160
【C++/学习】运算符重载&&const成员&&取地址
【C++】运算符重载 ⑦ ( 一元运算符重载 | 后置运算符重载 | 使用 全局函数 实现 后置 ++ 自增运算符重载 | 使用 成员函数 实现 后置 -- 自减运算符重载 )
韩曙亮
2023/10/15
2420
【C++】运算符重载 ⑦ ( 一元运算符重载 | 后置运算符重载 | 使用 全局函数 实现 后置 ++ 自增运算符重载 | 使用 成员函数 实现 后置 -- 自减运算符重载 )
【C++】运算符重载 ④ ( 一元运算符重载 | 使用 全局函数 实现 前置 ++ 自增运算符重载 | 使用 全局函数 实现 前置 - - 自减运算符重载 )
为了使全局函数中能访问 Student 类的私有成员 , 需要将该全局函数声明为 友元函数 ;
韩曙亮
2023/10/15
2470
【C++】运算符重载 ④ ( 一元运算符重载 | 使用 全局函数 实现 前置 ++ 自增运算符重载 | 使用 全局函数 实现 前置 - - 自减运算符重载 )
【C++】运算符重载 ⑥ ( 一元运算符重载 | 后置运算符重载 | 前置运算符重载 与 后置运算符重载 的区别 | 后置运算符重载添加 int 占位参数 )
讲解了 前置运算符 的 重载 , 前置运算符就是 ++Object 或 --Object , 一元运算符 在 对象的 前面 ;
韩曙亮
2023/10/15
1780
【C++】运算符重载 ⑥ ( 一元运算符重载 | 后置运算符重载 | 前置运算符重载 与 后置运算符重载 的区别 | 后置运算符重载添加 int 占位参数 )
【C++】运算符重载 ⑭ ( 逻辑与 && 运算符重载 | 逻辑或 || 运算符重载 | 完整代码示例 )
逻辑与 && 和 逻辑或 || 运算符 是 可以重载的 , 这两个操作符是 特殊操作符 ;
韩曙亮
2023/10/15
2150
【C++】运算符重载 ⑭ ( 逻辑与 && 运算符重载 | 逻辑或 || 运算符重载 | 完整代码示例 )
【C++修行之道】类和对象(四)运算符重载
C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为:关键字operator后面接需要重载的运算符符号。 函数原型:返回值类型 operator操作符(参数列表)。
走在努力路上的自己
2024/06/05
1170
【C++修行之道】类和对象(四)运算符重载
C++ 自增、自减运算符的重载和性能分析
a 先自增 +1 后, a 的值就为 1 ,然后再参与 a=5 的运算,所以最后 a的值是 5。
小林coding
2020/04/01
1.1K0
C++ 自增、自减运算符的重载和性能分析
C++从入门到精通——类的6个默认成员函数之赋值运算符重载
空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。
鲜于言悠
2024/04/17
1660
C++从入门到精通——类的6个默认成员函数之赋值运算符重载
【Example】C++ 运算符重载
首先,阅读之前要先搞清楚什么是运算符、函数重载。函数重载就是在一个范围内为一个函数声明多个实现方式,函数名必须一致。
芯片烤电池
2022/04/27
7920
C++(运算符重载+赋值拷贝函数+日期类的书写)
由于赋值操作我们改变的是调用这个函数的对象,所以我们在参数中可以加上cosnt修饰,传值和传引用,我们选择传引用,最后返回也返回引用,这样可以避免调用拷贝构造函数
用户11305458
2024/10/09
1050
C++(运算符重载+赋值拷贝函数+日期类的书写)
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
Srlua
2024/05/26
1220
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
C++运算符重载(三)之递增运算符重载
先++,后输出是指先运行成员函数前置递增运算符重载,再运行函数左移运算符重载。所以先++完成后再传入左移运算符重载函数中,要么是引用传递,要么是拷贝传递,上图使用的是拷贝传递,都可。
CtrlX
2022/09/21
7430
【c++】类和对象(五)赋值运算符重载
但是这里是全局的定义的operator==,这里会发现运算符重载成全局的就需要成员变量是公有的,即我的成员不能是private私有的,那么封装性如何保证?
用户11029103
2024/04/02
2290
【c++】类和对象(五)赋值运算符重载
【C++】运算符重载 ③ ( 二元运算符重载 | 运算符重载步骤 | 全局函数 实现 运算符重载 | 成员函数 实现 运算符重载 | 友元函数 实现 运算符重载 )
下面以 Student 类为例 , 编写 成员函数 / 全局函数 实现 运算符重载 代码 ;
韩曙亮
2023/10/15
2650
【C++】运算符重载 ③ ( 二元运算符重载 | 运算符重载步骤 | 全局函数 实现 运算符重载 | 成员函数 实现 运算符重载 | 友元函数 实现 运算符重载 )
【C++干货基地】特殊函数名的函数:赋值运算符重载
下面我们就来实践一下再日期类中 == 运算符如何重载, 以往我们在 内置类型 == 运算符返回的都是bool 类型
鸽芷咕
2024/05/26
830
【C++干货基地】特殊函数名的函数:赋值运算符重载
C++运算符重载详解(日期类实操)
在C语言中,对于内置类型,我们可以根据符号>、<、==等去直接比较大小,但是对于自定义来说,肯定不能直接比较大小,例如下面的日期类,想要比较两个两个日期的大小,或者相差多少天,直接写运算符肯定是不行的。
用户11316056
2024/10/16
1010
C++运算符重载详解(日期类实操)
【C++】类与对象(运算符重载、const成员、取地址重载)
C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
秦jh
2024/02/27
1800
【C++】类与对象(运算符重载、const成员、取地址重载)
【C++】运算符重载案例 - 字符串类 ⑤ ( 重载 大于 > 运算符 | 重载 小于 < 运算符 | 重载 右移 >> 运算符 - 使用全局函数重载 | 代码示例 )
左移 << 操作符 cout << s << endl , 是将 s 对象输出到 cout 标准输出流中 ;
韩曙亮
2023/10/15
5950
【C++】运算符重载 ⑨ ( 等号 = 运算符重载 | 调用默认浅拷贝构造函数的情况分析 | 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 | 等号 = 操作符重载步骤 )
C++ 编译器 为 类 提供的 默认的 拷贝操作 , 是对 成员变量 的简单拷贝 , 是 浅拷贝 ;
韩曙亮
2023/10/15
3370
【C++】运算符重载 ⑨ ( 等号 = 运算符重载 | 调用默认浅拷贝构造函数的情况分析 | 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 | 等号 = 操作符重载步骤 )
【C++】拷贝构造函数和赋值运算符重载详解
拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存 在的类类型对象创建新对象时由编译器自动调用。 拷贝构造函数是一个特殊的构造函数,用于创建一个新的对象,其内容与另一个已存在的对象相同。在C++中,拷贝构造函数通常用于将一个对象的值复制到另一个对象中(一个对象存在,一个对象不存在),以便在程序中进行对象的赋值和传递操作时,能够确保对象的内容被正确复制。
P_M_P
2024/02/05
2750
【C++】拷贝构造函数和赋值运算符重载详解
推荐阅读
【C++/学习】运算符重载&&const成员&&取地址
1160
【C++】运算符重载 ⑦ ( 一元运算符重载 | 后置运算符重载 | 使用 全局函数 实现 后置 ++ 自增运算符重载 | 使用 成员函数 实现 后置 -- 自减运算符重载 )
2420
【C++】运算符重载 ④ ( 一元运算符重载 | 使用 全局函数 实现 前置 ++ 自增运算符重载 | 使用 全局函数 实现 前置 - - 自减运算符重载 )
2470
【C++】运算符重载 ⑥ ( 一元运算符重载 | 后置运算符重载 | 前置运算符重载 与 后置运算符重载 的区别 | 后置运算符重载添加 int 占位参数 )
1780
【C++】运算符重载 ⑭ ( 逻辑与 && 运算符重载 | 逻辑或 || 运算符重载 | 完整代码示例 )
2150
【C++修行之道】类和对象(四)运算符重载
1170
C++ 自增、自减运算符的重载和性能分析
1.1K0
C++从入门到精通——类的6个默认成员函数之赋值运算符重载
1660
【Example】C++ 运算符重载
7920
C++(运算符重载+赋值拷贝函数+日期类的书写)
1050
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
1220
C++运算符重载(三)之递增运算符重载
7430
【c++】类和对象(五)赋值运算符重载
2290
【C++】运算符重载 ③ ( 二元运算符重载 | 运算符重载步骤 | 全局函数 实现 运算符重载 | 成员函数 实现 运算符重载 | 友元函数 实现 运算符重载 )
2650
【C++干货基地】特殊函数名的函数:赋值运算符重载
830
C++运算符重载详解(日期类实操)
1010
【C++】类与对象(运算符重载、const成员、取地址重载)
1800
【C++】运算符重载案例 - 字符串类 ⑤ ( 重载 大于 > 运算符 | 重载 小于 < 运算符 | 重载 右移 >> 运算符 - 使用全局函数重载 | 代码示例 )
5950
【C++】运算符重载 ⑨ ( 等号 = 运算符重载 | 调用默认浅拷贝构造函数的情况分析 | 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 | 等号 = 操作符重载步骤 )
3370
【C++】拷贝构造函数和赋值运算符重载详解
2750
相关推荐
【C++/学习】运算符重载&&const成员&&取地址
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验