• 【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

    在这里插入图片描述

  • 相关阅读:
    BUUCTF学习(7): 随便注,固网杯
    “配置DHCP服务器和DHCP中继的网络自动配置实验“
    前端开发技术栈(工具篇):2023深入了解webpack的安装和使用以及核心概念和启动流程(详细) 63.3k stars
    万物皆可集成系列:低代码如何不成为数据孤岛
    基于因果化评论的可解释推荐方法
    面试官让我用Flex写色子布局,我直接给写了6个
    大家介绍一篇学生选课系统的设计与实现
    python机器学习基础教程01-环境搭建
    逆势涨薪3k!新媒体运营毅然转行测试,我的入行秘籍是什么?
    基于SpringBoot Vue宠物领养系统
  • 原文地址:https://blog.csdn.net/han1202012/article/details/133564680