2016-04-09 18 views
0

私は自分の大学で最初にオブジェクト指向のプロジェクトを書いています。私は==演算子のオーバーロードに問題がありました。私の基本クラスの生物で 私は演算子==過負荷は比較されません

friend bool operator==(const Organism &curr, const Organism &other); 
bool operator==(const Organizm &curr, const Organizm &other) { 
    if (curr.x == other.x) { 
     if (curr.y == other.y) 
      return true; 
    } 
    return false; 
} 

を持っている動物は、生物、フォックスから継承し、オオカミが動物を継承しています。 iは

Fox f(1, 2); 
    Wolf w(1, 2); 
    Organizm *o1, *o2; 
    o1 = &f; 
    o2 = &w; 
    bool ok = (o1 == o2); 

比較です

は、適切な変数が同じであっても、falseを返す比較しようとします。 私はすべての生物をstd :: vectorに保つので、std :: findには演算子==が必要です。

+1

あなたの問題とは無関係ですが、ネストされた 'if'は論理ANDと等価であり、比較はブール結果を返します。関数本体で行う必要があるのは、 'return curr.x == other.x && curr.y == other.y;' –

+0

です。また、細心の注意を払ってください。生物と組織は2つの異なる言葉です。 –

+0

その生物と組織について教授に名前を付けてポスティングする前にそれを翻訳するときには、すべてを変更するのを忘れてしまいました –

答えて

1

あなたはそれらのオブジェクトを比較しておらず、オペレータは呼び出されていません。

ポインタをこれらのオブジェクトと比較しています。明らかに、2つのオブジェクトが同時に同じ場所に存在することはできないため、比較は常に失敗します。

私はあなたが以下のいずれかを記述するためのものを想像:

Fox f(1, 2); 
Wolf w(1, 2); 

Organizm* o1 = &f; 
Organizm* o2 = &w; 

const bool ok = (*o1 == *o2); 

または、より良い:

Fox f(1, 2); 
Wolf w(1, 2); 

const Organizm& o1 = f; 
const Organizm& o2 = w; 

const bool ok = (o1 == o2); 

か、単に:

Fox f(1, 2); 
Wolf w(1, 2); 

// implicit conversions are a thing! 
const bool ok = (f == w); 
+0

ありがとうございました。私の主な問題は、ベクターワークでstd :: findを作ることです。私の演算子==はstd :: fingでうまく動作しますか? –

+0

@SzymonStrzelka:それを試してみてください! –

+0

私は持っている \t 'ベクトル organizmy; ベクトル :: iterator i = world.organisms。ベギン(); \t \t o = this-> newAnimal(世界、this-> x + _x、this-> y + _y); \t \t i = find(world.organisms.begin()、world.organisms.end()、o); ' これは毎回何かを見つけます。ここでも同じxとyの要素があります –

1

問題はあなたのコードということですオブジェクトを比較しません。それはそれらのアドレスを比較しています

bool ok = (o1 == o2); // Compare address of f to address of w 

あなたは、ポインタが参照するオブジェクトを比較したい場合、呼び出しは次のようにする必要があります:

bool ok = (*o1 == *o2); 
1

Organizm *o1 = &f; 
Organizm *o2 = &w; 
bool ok = (o1 == o2); 

であなたがポインタを比較します

希望する

bool ok = (*o1 == *o2); 

カスタム演算子を使用してオブジェクトを比較する。

関連する問題