私は問題がありますが、正しく解決したかどうか、またはより正確な方法があるかどうかはわかりません。等価演算子のオーバーロードでは、Iを導出するベースオブジェクトにconst参照をキャストする必要があり、今派生へのconstベース参照のキャスト
class Data_Base
{
...
}
class Data_Error : public Data_Base
{
...
}
:
は今、私は、2つのクラス(および他から1継承)を有しますオブジェクトを再度テストするために、オブジェクトを再配置します。現時点では私はこれをやっている:
今bool Data_Error::operator==(const Data_Base &other) const
{
if (Data_Base::operator !=(other))
return false;
const Data_Error &other_cast = (const Data_Error &)other;
... More tests on other_cast ...
}
、それが実装されているので、キャストの瞬間にother
変数は、Data_Base
==
オペレータ(および!=
オペレータ以来、Data_Error
以外の何かであることがありません==
の否定のように)は、派生オブジェクトのタイプもチェックするので、タイプが正しい場合にのみそのラインに到達します。
これで問題はありますか? 「より正確な」ソリューションはありますか?
私はQt(5.7)で作業していますので、「もっとQTish」ソリューションがありますか?
なぜ、 'Data_Error'と' Data_Base'子孫を比較しますか?階層内の異なるブランチの型を比較するには、どのような意味がありますか? 'bool Data_Error :: operator ==(const Data_Error&other)const'に固執するだけです。 – StoryTeller
@StoryTeller基本型のリストがある場合、そのアイテムのいくつかがそれと等しいかどうかを調べるために反復したいと思います。私は単にすべての項目に対して==を呼び出します。関数では、型が同じかどうかをチェックし、そうでなければ等しいとは限りません。しかし、この目的のために、他の型は基本型でなければなりません。それ以外の場合、プログラムは2つの異なる枝を比較する方法を知らない – frarugi87
'演算子=='は仮想ですか?そうでない場合、期待どおりに動作しません。 – StoryTeller