對於示例的習慣,你定會定義operator==
如下:
friend bool operator==(const ViewMode &lhs, const ViewMode &rhs) {
return (lhs.w == rhs.w) && the rest;
}
friend bool operator!=(const ViewMode &lhs, const ViewMode &rhs) {
return !(lhs == rhs);
}
在C++中,你通常不會寫一個函數允許ViewMode
對象的東西,有什麼都沒有進行比較與ViewMode
聯繫。我想,如果你真的想要一個比較返回false,而不是拒絕編譯,那麼你可以添加幾個模板運營商(如自由函數,類外):
template <typename T>
bool operator==(const ViewMode &, const T&) {
return false;
}
template <typename T>
bool operator==(const T &, const ViewMode&) {
return false;
}
,但我真不」 t推薦它。 Java成語不適用於C++,因爲在C++中,你幾乎不應該有對象,但不知道它的類型。
如果你想要你的等號功能是虛擬的,那麼最好寫一個equals()
虛擬功能,而不是使用operator==
。您將其編寫爲const ViewObject &
作爲參數,因此不需要與instanceof
檢查等效。這也是一樣,因爲C++沒有任何方法來獲取完全未知類型的對象並測試它是否是指定類型的實例。
您很少需要C++中的多態等效函數,但是如果您在std::unordered_map
中使用了該函數,那麼您將爲unordered_map
指定額外的模板參數。給它一個相等比較函數,它需要兩個指針,並在其中一個或另一個上調用equals
,以及一個散列函數,它可以做一些明智的事情。
我刪除了'java'標籤,因爲Java專家無法回答這個問題。 –
自從我編寫C++以來已經很長時間了,但我認爲你必須重載==運算符。 – ChadNC
這些標籤混淆了你的格式。所以我爲你修好了。 – Mysticial