我遇到了一個問題,但我不知道我是否正確解決了問題,或者是否有更正確的方法。將const引用投射到派生
現在,我有兩個類(和從其他的一個繼承):
class Data_Base
{
...
}
class Data_Error : public Data_Base
{
...
}
現在,在相等運算的過載,我必須將常量引用轉換爲基礎對象派生再次對象,以便測試其成員。目前我在做這個:
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_Error
,因爲Data_Base
==
運營商(和!=
運營商,因爲它的實現作爲==
的否定)也會檢查派生對象的類型,因此只有在類型正確的情況下才能到達該行。
現在,這有什麼問題嗎?有沒有更「正確」的解決方案?
我正在使用Qt(5.7),那麼是否有任何「更多QTish」解決方案?
你爲什麼要比較'Data_Error'到'Data_Base'後代?它有什麼意義來比較層次結構中不同分支上的類型?只需堅持'bool Data_Error :: operator ==(const Data_Error&other)const',我說。 – StoryTeller
@StoryTeller因爲當我有一個基本類型的列表,我想迭代它來檢查是否有一些項目是相等的。我只需在每個項目上調用==;在函數中我檢查類型是否相同,否則它們不相等。但是爲了這個目的,其他的類型應該是基本類型,否則程序不知道如何比較兩個不同的分支 – frarugi87
你的'operator =='虛擬嗎?如果不是,它不會像你期望的那樣工作。 – StoryTeller