1

Rational、Real、および Complex というカスタム クラスがあります。Complex では、Complex と Real、または Complex と Rational を比較できる演算子をオーバーロードします。たとえば、Rational から Complex への暗黙のキャストを定義できれば簡単ですが、説明する価値のない理由により、できません。

したがって、私はとりわけ、

==(Complex a, Real b)

そしてまた

==(Real a, Complex b)

比べてみると明らかに

c==null

呼び出しがあいまいであるというエラー メッセージが表示されます。関連するスレッドで、定義するだけでよいという考えを見ました==(Complex a, object b) が、対称性を許可したい==(object a, Complex b)場合は、2 つの複合体の比較も曖昧になります。

現在、null をチェックするときは、最初に Complex をオブジェクトにキャストする必要があります。より良い解決策は何ですか? (継承などのクラス間の関係に依存するソリューションではなく、一般的なソリューションを望んでいます。)

4

3 に答える 3

0

==(Complex c, Real C)andのようなものがあると思いますが==(Complex c, Complex C)、もちろんコンパイラはどちらを選択すればよいかわかりませんc1 == (Complex) null

于 2013-05-17T05:09:26.330 に答える
0

おそらく、解決策はないと思うことを投稿する必要があります。対称性を捨てて ==(Complex a, object b) を使用することにしました。投稿してくれたみんな、ありがとう!

于 2013-06-23T05:30:01.180 に答える