2012-04-17 71 views
0

您好我想知道我怎么能解决这个问题,C++运算符重载逻辑opertors

我需要重载+, - 和*运营商,但需要例如逻辑运算符来代替它们;

“+” 应该使用OR

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

将我有在过载放置一些如果说明的话?

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

感谢

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

+0

这些函数应该对整数操作吗?非0,1输入的行为应该是什么? – cmh 2012-04-17 10:54:17

+0

这是一个非常糟糕的主意。不要给现有的操作符带来意想不到的新语义(除非你是一个Boost库的作者,并且有一个很好的理由),相反,这没有帮助。 – 2012-04-17 10:55:24

回答

1

没有必要为if说法是,你只需要返回的&&||结果。

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

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

+0

我也想请一个解释。 – 2012-04-17 11:08:19

1

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

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

重载运算符+(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 
+1

不错,但不可能。命名新的Int类也不是一个好主意。 – visitor 2012-04-17 10:59:34

+1

“重载运算符+(int,int)不是一个好主意。”这不仅不是一个好主意,而且也是不可能的。 – 2012-04-17 10:59:39

+0

我已经更新了我的答案。 – 2012-04-17 11:02:47