• 【C++】运算符重载 ⑭ ( 逻辑与 && 运算符重载 | 逻辑或 || 运算符重载 | 完整代码示例 )






    一、逻辑与 && 和 逻辑或 || 运算符重载




    1、逻辑与 && 和 逻辑或 || 运算符 要求


    逻辑与 && 和 逻辑或 || 运算符 是 可以重载的 , 这两个操作符是 特殊操作符 ;


    短路规则 : 其 内部 内置了 短路 规则 , 也就是

    • 前面的 逻辑与 && 运算 , 只要得到 false 结果 , 那么后续的逻辑与运算也没要运行 , 整个表达式的结果都是 false ;
    • 前面的 逻辑或 || 运算 , 只要得到 true 结果 , 那么后续的逻辑或运算也没要运行 , 整个表达式的结果都是 true ;

    C++ 函数实现 , 无法实现短路规则 ; 因此 一般情况下 , 不实现 逻辑与 和 逻辑或 的运算符重载 ;


    连续运算规则 : 逻辑与 && 和 逻辑或 || 运算符 重载的函数 , 需要 连续执行 , 比如 3 3 3 个对象进行连续的 逻辑与 && 和 逻辑或 || 运算 ; 返回值需要满足上述要求 , 一般为 bool ;



    2、逻辑与 && 运算符重载


    使用 成员函数 实现 逻辑与 && 运算符重载 :

    • 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载的运算符 ,
      • 2 2 2 个对象 Student s1, s2 之间进行 逻辑与 && 运算符 运算 ,
      • 使用时用法为 s1 && s2 ;
      • 函数名是 operator&& ;
    operator&&
    
    • 1
    • 然后 , 根据操作数 写出函数参数 , 参数一般都是 对象的引用 ;
      • 括号运算符 使用时用法为 s1 && s2 ;
      • 左操作数 : 其中 左操作数 是 s , 这里通过 this 指针调用 , 不需要声明在参数中 ;
      • 若干右操作数 : 右操作数 也是 Student 对象 ; 该操作数需要声明在参数中 , 注意 普通数据类型 直接声明 , 对象数据类型 需要声明 为 引用类型 ;
      • 上述两个是对象类型 , 对象一般传入 指针 或 引用 , 由于是基础数据类型 , 这里传入基础数据类型 ; 如果是 对象类型 , 则传入引用 ;
    operator&&(Student& s)
    
    • 1
    • 再后 , 根据业务完善返回值 , 返回值可以是 引用 / 指针 / 元素 ;
      • 此处返回值根据需求即可 ; 返回 bool ;
    bool operator&&(Student& s)
    
    • 1
    • 最后 , 实现函数体 , 编写具体的运算符操作业务逻辑 ;
    	// 使用 成员函数 实现 逻辑与 && 运算符重载
    	bool operator&&(const Student& s)
    	{
    		// 函数体省略
    		return true;
    	};
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3、逻辑或 || 运算符重载


    使用 成员函数 实现 逻辑或 || 运算符重载 :

    • 首先 , 写出函数名 , 函数名规则为 " operate " 后面跟上要重载的运算符 ,
      • 2 2 2 个对象 Student s1, s2 之间进行 逻辑或 || 运算符 运算 ,
      • 使用时用法为 s1 || s2 ;
      • 函数名是 operator|| ;
    operator||
    
    • 1
    • 然后 , 根据操作数 写出函数参数 , 参数一般都是 对象的引用 ;
      • 括号运算符 使用时用法为 s1 || s2 ;
      • 左操作数 : 其中 左操作数 是 s , 这里通过 this 指针调用 , 不需要声明在参数中 ;
      • 若干右操作数 : 右操作数 也是 Student 对象 ; 该操作数需要声明在参数中 , 注意 普通数据类型 直接声明 , 对象数据类型 需要声明 为 引用类型 ;
      • 上述两个是对象类型 , 对象一般传入 指针 或 引用 , 由于是基础数据类型 , 这里传入基础数据类型 ; 如果是 对象类型 , 则传入引用 ;
    operator||(Student& s)
    
    • 1
    • 再后 , 根据业务完善返回值 , 返回值可以是 引用 / 指针 / 元素 ;
      • 此处返回值根据需求即可 ; 返回 bool ;
    bool operator||(Student& s)
    
    • 1
    • 最后 , 实现函数体 , 编写具体的运算符操作业务逻辑 ;
    	// 使用 成员函数 实现 逻辑或 || 运算符重载
    	bool operator||(const Student& s)
    	{
    		// 函数体省略
    		return false;
    	};
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6




    二、完整代码示例



    代码示例 :

    #include "iostream"
    using namespace std;
    
    class Student
    {
    public:
    	// 使用 成员函数 实现 括号() 运算符重载
    	int operator()(int a, int b)
    	{
    		return a + b;
    	};
    
    	// 使用 成员函数 实现 逻辑与 && 运算符重载
    	bool operator&&(const Student& s)
    	{
    		// 函数体省略
    		return true;
    	};
    
    	// 使用 成员函数 实现 逻辑或 || 运算符重载
    	bool operator||(const Student& s)
    	{
    		// 函数体省略
    		return false;
    	};
    };
    
    int main() {
    
    	Student s1, s2;
    
    	// 调用 括号 运算符
    	cout << "s1(1, 2) = " << s1(1, 2) << endl;
    
    	// 调用 逻辑与 运算符
    	cout << "s1 && s2 = " << (s1 && s2) << endl;
    
    	// 调用 逻辑或 运算符
    	cout << "s1 || s2 = " << (s1 || s2) << endl;
    
    	// 控制台暂停 , 按任意键继续向后执行
    	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

    执行结果 :

    s1(1, 2) = 3
    s1 && s2 = 1
    s1 || s2 = 0
    Press any key to continue . . .
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

  • 相关阅读:
    hiredis笔记
    Dockerfile手册
    不懂Hybird开发,感觉错过一个亿~
    Mysql数据库清空表中数据、删除表
    shiro认证绕过:CVE-2020-(1957,17523)
    蓝桥杯实战应用【算法代码篇】-多分支递归:裴波那契序列(附Java、C++和R语言代码)
    ThreeJS进阶之动画系统(Animation system)
    <新神榜:杨戬>
    类的装饰器
    Promise.all如果其中之一失败,怎么能够拿到其他成功的结果
  • 原文地址:https://blog.csdn.net/han1202012/article/details/133696589