0

こんにちは、私はこの問題にどのように対処できるか疑問に思っていました。

+、-、および * 演算子をオーバーロードする必要がありますが、たとえば論理演算子に置き換える必要があります。

「+」は OR を使用する必要があります

0+0 = 0、0+1 = 1、1+1 = 1、1+0 = 1

ある種のifステートメントをオーバーロードに配置する必要がありますか?

どうすればこれを行うことができますか?

ありがとう

データ型としてバイナリを使用し、データとしてバイナリを持つ 2 つの行列を使用します。

4

3 に答える 3

1

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
于 2012-04-17T10:56:04.717 に答える
1

ステートメントは必要ありません。 andifの結果を返すだけです。&&||

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

組み込み型の演算子をオーバーロードできないことに注意してください。少なくとも 1 つの引数をユーザー定義にする必要があります。

于 2012-04-17T10:55:22.013 に答える
1

整数やその他の組み込み型に対してこれらの演算子をオーバーロードしたくありませんか? 無理だから。ブール値または整数値を含む独自のクラスがある場合、ロジックは次のようになります。

bool operator + (const MyClass& m1, const MyClass& m2) 
{
     return m1.GetMyBooleanMember() || m2.GetMyBooleanMember();
} 
于 2012-04-17T10:55:51.920 に答える