2012-03-28 14 views
0
bool operator == (const MyString& left, const MyString& right) 
{ 
    if(left.value == right.value) 
     return true; 
    else return false; 
} 
bool operator != (const MyString& left, const MyString& right) 
{ 
    if(left == right) 
     return false; 
    else 
     return true; 
} 
bool operator < (const MyString& left, const MyString& right) 
{ 
    if(strcmp(left.value, right.value) == -1) 
     return true; 
    else 
     return false; 
} 
bool operator > (const MyString& left, const MyString& right) 
{ 
    if(strcmp(left.value, right.value) == 1) 
     return true; 
    else 
     return false; 
} 
bool operator <= (const MyString& left, const MyString& right) 
{ 
    if(strcmp(left.value, right.value) == -1 || strcmp(left.value, right.value) == 0) 
     return true; 
    else 
     return false; 
} 
bool operator >= (const MyString& left, const MyString& right) 
{ 
    if(strcmp(left.value, right.value) == 1 || strcmp(left.value, right.value) == 0) 
     return true; 
    else 
     return false; 
} 

これらは私のMyStringクラスの比較演算子ですが、私の教授が私に与えたテストプログラムには失敗しています。何が問題ですか?MyStringクラスの比較演算子をオーバーロードしています

+1

*質問*は何ですか? – Puppy

+1

'strcmp'関数はゼロ、_negative_、または_positive_を返します。それは '-1'や' 1'ではありません。 –

+0

良い答えが、私は '演算子=='あなたが欲しいものをやっているとは思わない。あなたは値ではなくポインタを比較しています。これを試してください: 'return!strcmp(left.value、right.value);' – parkovski

答えて

1

bool operator == (const MyString& left, const MyString& right) { 
    return strcmp(left.value, right.value) == 0; 
} 
bool operator < (const MyString& left, const MyString& right) { 
    return strcmp(left.value, right.value) < 0; 
} 

bool operator != (const MyString& left, const MyString& right) { 
    return !(left == right); 
} 
bool operator > (const MyString& left, const MyString& right) { 
    return !(left == right) && !(left < right); 
} 
bool operator <= (const MyString& left, const MyString& right) { 
    return left < right || left == right; 
} 
bool operator >= (const MyString& left, const MyString& right) { 
    return !(left < right); 
} 
+0

コードの複製を避けるため、このソリューションを使用することを強くお勧めします。 – Black

+0

私はこれを使いました。それは非常にきれいで、よく見えます。どうもありがとう! –

0

私はstrcmpが非等価の場合にゼロ以外の値を返すと思います。したがって、1と-1を使用する代わりに、0より大きく0より小さいケースを試してみてください。

0

通常、operator==operator<を実装するだけです。他のすべての関係演算子を委譲して、コードの再利用を保証することができます。あなたのためにこれを行うことができるブーストにはCRTPミックスインさえあると私は信じている。

+0

単に 'utility'を含むと、他の演算子も得られます:http://en.cppreference.com/w/cpp/utility/rel_ops/ operator_cmp –

1

問題はstrcmpにあります。文書hereを見ることができます。

あなたはさらにようなものにコードを減らすことができます:あなたはちょうど2つのそれらの各コンパレータを表現することができ

bool operator < (const MyString& left, const MyString& right) 
{ 
    return (strcmp(left.value, right.value) < 0); 
} 
関連する問題