cpp运算符重载-逻辑运算符

05-7 运算符重载-逻辑运算符

逻辑运算符包括:逻辑与(&&/and)、逻辑或(||/or)、逻辑否(!)。

可以重载的逻辑运算符是:逻辑与(&&/and)、逻辑或(||/or)。

逻辑运算符重载的作用:利用逻辑运算符,可以让两个自定义类型的对象进行对比。

  • 提示
    1. 尽量不要使用逻辑运算符重载。
    2. 操作符重载本质是函数重载,函数的参数都会进行求值运算,改变了原来逻辑运算符的特性。

完成逻辑运算符重载有两种方法:

  • 在成员函数里面实现重载。
  • 在全局函数里面实现重载。

事实上逻辑运算符非常简单,和关系运算符([05-5 运算符重载-关系运算符](./05-5 运算符重载-关系运算符.md))基本一样。所以我们简单过一下。

  1. 在成员函数里面实现重载。

    class test
    {
    public:
    int m_A;
    int m_B;
    bool operator&&(class test& p)
    {
        if ((m_A == p.m_A) && (m_B == p.m_B))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    };

    提示:在 c++中,&&表示的是and(与),||表示的是or(或)。

    因为一般的关系运算符只有或者两种表达形式,在 c++中就是布尔类型(bool),所以我们使用布尔(bool)作为返回值。

    提示:在 c++中,布尔类型:0表示false(否),1(或者其他数字)表示true(是)。

  2. 在全局函数里面实现重载。

    bool operator&&(class test& p1, class test& p2)
    {
    if ((p1.m_A == p2.m_A) && (p1.m_B == p2.m_B))
    {
        return true;
    }
    else
    {
        return false;
    }
    }
  3. 其他的关系运算符(以全局函数重载为例)

    1. 逻辑与(&&/and

      bool operator&&(class test& p1, class test& p2)
      {
      if ((p1.m_A == p2.m_A) && (p1.m_B == p2.m_B))
      {
          return true;
      }
      else
      {
          return false;
      }
      }
    2. 逻辑或(||/or

      bool operator||(class test& p1, class test& p2)
      {
      if ((p1.m_A == p2.m_A) || (p1.m_B == p2.m_B))
      {
          return true;
      }
      else
      {
          return false;
      }
      }
  • 为什么尽可能不要使用逻辑运算符重载?

    我们先来看一段代码:

    int main()
    {
    int A = 10;
    int B = 3;
    int C = 7;
    cout << A && (B + C);
    cout << endl;
    cout << (A && (B + C)) << endl;
    return 0;
    }

    运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)

    10
    1

    在这一段代码里面,cout << A && (B + C);的运行结果是10,这是执行了(B + C)的结果。而cout << (A && (B + C)) << endl;的运行结果是1,表示的是真。

    但是逻辑运算符本质是函数的重载,会改变逻辑运算符本身的性质。

  • 总结

    1. 尽量不要使用逻辑运算符重载。
    2. 操作符重载本质是函数重载,函数的参数都会进行求值运算,改变了原来逻辑运算符的特性。
文章「cpp运算符重载-逻辑运算符」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/921」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇