您好我想知道我怎么能解决这个问题,C++运算符重载逻辑opertors
我需要重载+, - 和*运营商,但需要例如逻辑运算符来代替它们;
“+” 应该使用OR
0 + 0 = 0,0 + 1 = 1,1 + 1 = 1,1 + 0 = 1
将我有在过载放置一些如果说明的话?
任何帮助我如何做到这一点?
感谢
他们将使用二进制作为数据类型,两个矩阵二进制作为数据
您好我想知道我怎么能解决这个问题,C++运算符重载逻辑opertors
我需要重载+, - 和*运营商,但需要例如逻辑运算符来代替它们;
“+” 应该使用OR
0 + 0 = 0,0 + 1 = 1,1 + 1 = 1,1 + 0 = 1
将我有在过载放置一些如果说明的话?
任何帮助我如何做到这一点?
感谢
他们将使用二进制作为数据类型,两个矩阵二进制作为数据
没有必要为if
说法是,你只需要返回的&&
和||
结果。
struct A
{
bool val;
bool operator + (const A& other) { return val || other.val; }
bool operator * (const A& other) { return val && other.val; }
};
请注意,您不能重载运算符的内置类型。至少有一个参数必须是用户定义的。
我也想请一个解释。 – 2012-04-17 11:08:19
你不想为整数或任何其他内置类型重载这些运算符吗?因为这是不可能的。如果你有自己的类包含一个布尔值或整数值,则逻辑是这样的:
bool operator + (const MyClass& m1, const MyClass& m2)
{
return m1.GetMyBooleanMember() || m2.GetMyBooleanMember();
}
重载运算符+(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类也不是一个好主意。 – visitor 2012-04-17 10:59:34
“重载运算符+(int,int)不是一个好主意。”这不仅不是一个好主意,而且也是不可能的。 – 2012-04-17 10:59:39
我已经更新了我的答案。 – 2012-04-17 11:02:47
这些函数应该对整数操作吗?非0,1输入的行为应该是什么? – cmh 2012-04-17 10:54:17
这是一个非常糟糕的主意。不要给现有的操作符带来意想不到的新语义(除非你是一个Boost库的作者,并且有一个很好的理由),相反,这没有帮助。 – 2012-04-17 10:55:24