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






    一、一元运算符重载




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


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

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

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


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

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




    二、完整代码示例



    代码示例 :

    #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;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

    执行结果 :

    age = 11 , height = 121
    age = 10 , height = 120
    请按任意键继续. . .
    
    • 1
    • 2
    • 3

    在这里插入图片描述

  • 相关阅读:
    MATLAB | 绘图复刻(二) | 折线图+误差棒+柱状图+散点抖动+灰色背景+图片叠加
    C# CodeFormer Inpainting 人脸填充
    小程序request请求封装
    二叉树题目:二叉树寻路
    利用北斗GEO卫星观测监测深圳市周围地区电离层空间环境
    篇(18)-Asp.Net Core入门实战-文章管理之文章内容管理(下拉框二级结构递归)
    Google Earth Engine ——利用where来合理划分NDVI阈值
    如何使用Hibernate Envers审核数据,包括用户名信息
    做外贸一定要知道的20条经验教训
    微信小程序|步骤条
  • 原文地址:https://blog.csdn.net/han1202012/article/details/133564680