回答
object[1]
返回someType
的對象。您需要在someType
上超載operator==
。
好的,但我得到這個錯誤:「.. \ Database.cpp:36:錯誤:'數據庫::運營商[](無符號詮釋)中的'運算符=='不匹配const(x)== inRecord' 「 – cactusbin 2010-07-03 04:03:08
如果你用一些相關的代碼發佈一個新問題,可能會更容易找出:) – Cogwheel 2010-07-03 04:05:56
'inRecord'和'operator [] const'的返回值的類型是什麼?你是否已經爲'operator []'的返回值重載'operator =='作爲非const方法? – 2010-07-03 10:58:29
你所描述的只是兩個獨立的操作符重載。只要確保operator ==
的參數匹配返回類型operator []
。
不要將運算符重載看作任何特殊的東西,它們就像正常的函數重載一樣。具有相同名稱的兩個函數可以重載,因爲它們具有不同的簽名。 (您不僅可以通過該方法的返回類型超載2起這不僅是運算符重載,它是在一般功能都超載。)
所以,簡單地是這樣的:
class B {};
class C {};
class A
{
bool operator==(const B& b)
{
//Put logic here
return true;
}
bool operator==(const C& c)
{
//Put logic here
return true;
}
};
以上代碼將允許您將A
類型的對象與B
類型的對象進行比較。它還將允許您將A
類型的對象與C
類型的對象進行比較。
起初我真的很困惑這個問題的措辭,但現在我想我明白了。你不能直接這樣做;但是你可以達到同樣的效果。這個想法是讓operator[]
返回一個代理對象。對於代理對象,您可以提供operator==
以進行比較的自定義行爲。我已經看到std :: map的operator []在一些較老的,更晦澀的標準庫實現上以這種方式實現。
實例(假設對象[1]正常返回美孚&):
class SomeProxy
{
private:
Foo* f;
public:
explicit SomeProxy(Foo& i_f): f(&i_f) {}
operator Foo&() const {return *f;}
};
SomeProxy Database::operator[](unsigned int n)
{
return SomeProxy(some_array + n);
}
bool operator==(const SomeProxy& lhs, const Foo& rhs)
{
// provide custom behavior
}
// also provide custom behavior for these:
bool operator==(const SomeProxy& lhs, const SomeProxy& rhs);
bool operator==(const Foo& lhs, const SomeProxy& rhs);
注意:您要重載在這種情況下的比較操作的意義似乎有種奇(代理對象通常用於具有關聯結構的自定義分配行爲或用於花式元模式編程),但爲了進行比較,它們通常應提供與直接使用Foo
相同的含義,例如不過,以下是實現方法:通過operator==
獲取自定義行爲的方法,該方法僅適用於在同一個表達式中使用重載的operator[]
。
如果你想使這個徹底,那麼使SomeProxy的構造函數是私人的,並使數據庫成爲朋友。這樣,只有數據庫:可以創建這些對象(在這種情況下通過operator []),客戶端將無法複製它(他不應該這樣做),只從其中獲取Foo對象/引用或使用表達式中返回的代理。
用於討論代理 – 2010-07-03 17:20:31
- 1. ()操作員超載
- 2. 操作員超載()
- 3. 操作員超載故障
- 4. 超載對其操作(操作員*())
- 5. 操作員新操作員和新操作員不能重載?
- 6. 操作員超載錯誤「與操作員錯誤不匹配」
- 7. 重載+操作統計員
- 8. 重載操作員=錯誤
- 9. 重載操作員幫助?
- 10. 有關操作員超載的問題
- 11. C++超載+操作員朋友函數
- 12. 重載操作員的套集
- 13. 成員函數vs操作符重載
- 14. 重載新的操作員問題
- 15. 操作員使用模板重載
- 16. 重載<<操作員錯誤
- 17. SAL批註和新操作員重載
- 18. 重載操作員身體的奧祕
- 19. 超載操作員和編寫操縱器?
- 20. 重載的操作員試圖把另一個重載的操作員作爲參數
- 21. 錯誤操作符<<重載 - 沒有操作員發現
- 22. 如何重載<<操作符以打印類成員?
- 23. 作爲非朋友幫手操作員超載cout
- 24. 重載=操作
- 25. 重載操作
- 26. 超載引用操作
- 27. .net操作符超載
- 28. 寫C++操作符超載?
- 29. C++超載[]操作不
- 30. 重寫+ =操作員C++
只是單獨重載它們,編譯器會照顧它。有什麼問題? – Beta 2010-07-03 03:50:06