2012-04-17 72 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