【问题标题】:c++ operator overloading logical opertorsc++ 运算符重载逻辑运算符
【发布时间】:2012-04-17 10:50:40
【问题描述】:

您好,我想知道如何解决这个问题,

我需要重载 +、- 和 * 运算符,但需要用逻辑运算符替换它们;

"+" 应该使用 OR

0+0 = 0 , 0+1 = 1, 1+1 = 1 ,1+0 = 1

我是否必须在重载中放置某种 if 语句?

对我如何做到这一点有任何帮助吗?

谢谢

他们将使用二进制作为数据类型,两个以二进制作为数据的矩阵

【问题讨论】:

  • 这些函数应该对整数进行操作吗?非 0,1 输入的行为应该是什么?
  • 这是一个非常糟糕的主意。不要给现有的操作符提供意想不到的新语义(除非你是 Boost 库的作者并且有一个该死的好理由),相反,这无济于事。

标签: c++ operator-overloading logical-operators


【解决方案1】:

不需要if 语句,只需要返回&&|| 的结果即可。

struct A
{
   bool val;
   bool operator + (const A& other) { return val || other.val; }
   bool operator * (const A& other) { return val && other.val; }
};

请注意,您不能为内置类型重载运算符。至少有一个参数必须是用户定义的。

【讨论】:

  • 我也想解释一下。
【解决方案2】:

您不想为整数或任何其他内置类型重载这些运算符,对吗?因为这是不可能的。如果你有自己的类包含一个布尔值或整数值,那么逻辑是这样的:

bool operator + (const MyClass& m1, const MyClass& m2) 
{
     return m1.GetMyBooleanMember() || m2.GetMyBooleanMember();
} 

【讨论】:

    【解决方案3】:

    重载 operator+(int, int) 是不可能的,但是您可以创建一个新类型来包装一个 int 并具有您想要的行为...

    struct BoolInt
    {
       int i;
    };
    
    BoolInt operator+(BoolInt x, BoolInt y) { return { x.i || y.i }; }
    BoolInt operator*(BoolInt x, BoolInt y) { return { x.i && y.i }; }
    BoolInt operator-(BoolInt x, BoolInt y) { return { x.i || !y.i }; } // guessing
    

    【讨论】:

    • 不错的主意,但不可能。将新类命名为 Int 也不是一个好主意。
    • “重载 operator+(int, int) 不是一个好主意。”这不仅不是一个好主意,而且是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多