2010-07-23 88 views
2

如果我有一些階級基礎,並從中它派生的,裏面基礎上,我有朋友功能派生類可以使用基類的朋友函數嗎?

friend int operator!=(const Basis&, const Basis&) 

裏面派生類中,我沒有這樣的功能 所以我的問題是,如果我有在我的主要

If(derived1 != derived2) ... 

它爲什麼有效?我沒有任何構造函數用於鑄造!=預先感謝 如果我寫 if(derived!= basis)它會起作用嗎?

回答

2

編譯器將它們作爲類Basis的對象進行比較。由於您始終可以將派生類隱式轉換爲基類,因此編譯器可以將它們傳遞給operator !=Basis超載。當然,這種比較只能使用Basis中聲明的字段,所以如果您想通過使用Derived的成員來比較更具體,則必須定義一個單獨的operator !=過載。

友誼宣言與operator !=無關;它只允許operator !=訪問在Basis中聲明的私人成員。

+0

如果我寫if(derived!= basis)它會起作用嗎? – Chan 2010-07-23 14:26:23

+0

@Chan,是的,任何'Basis'或派生類類型的對象組合都可以與你的'operator!='重載進行比較,並且需要注意的是,重載只使用從'Basis'繼承的部分。這是基本OO'是'繼承關係的結果。 (http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)) – 2010-07-23 14:31:57

+0

非常感謝 – Chan 2010-07-23 14:38:48

0

這聽起來像你的朋友功能只比較DerivedBasis部分。所以,它在時尚之後起作用,但忽略了Derived中的任何數據。

0

因爲您的派生類繼承了您的Basis類所具有的所有內容,在本例中爲!=的運算符重載,您的派生對象(derived1和derived2)也定義了它們。

相關問題