您好我想知道我怎麼能解決這個問題,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