如果我有一些階級基礎,並從中它派生的,裏面基礎上,我有朋友功能派生類可以使用基類的朋友函數嗎?
friend int operator!=(const Basis&, const Basis&)
裏面派生類中,我沒有這樣的功能 所以我的問題是,如果我有在我的主要
If(derived1 != derived2) ...
它爲什麼有效?我沒有任何構造函數用於鑄造!=預先感謝 如果我寫 if(derived!= basis)它會起作用嗎?
如果我有一些階級基礎,並從中它派生的,裏面基礎上,我有朋友功能派生類可以使用基類的朋友函數嗎?
friend int operator!=(const Basis&, const Basis&)
裏面派生類中,我沒有這樣的功能 所以我的問題是,如果我有在我的主要
If(derived1 != derived2) ...
它爲什麼有效?我沒有任何構造函數用於鑄造!=預先感謝 如果我寫 if(derived!= basis)它會起作用嗎?
編譯器將它們作爲類Basis
的對象進行比較。由於您始終可以將派生類隱式轉換爲基類,因此編譯器可以將它們傳遞給operator !=
的Basis
超載。當然,這種比較只能使用Basis
中聲明的字段,所以如果您想通過使用Derived
的成員來比較更具體,則必須定義一個單獨的operator !=
過載。
友誼宣言與operator !=
無關;它只允許operator !=
訪問在Basis
中聲明的私人成員。
這聽起來像你的朋友功能只比較Derived
的Basis
部分。所以,它在時尚之後起作用,但忽略了Derived
中的任何數據。
因爲您的派生類繼承了您的Basis類所具有的所有內容,在本例中爲!=的運算符重載,您的派生對象(derived1和derived2)也定義了它們。
如果我寫if(derived!= basis)它會起作用嗎? – Chan 2010-07-23 14:26:23
@Chan,是的,任何'Basis'或派生類類型的對象組合都可以與你的'operator!='重載進行比較,並且需要注意的是,重載只使用從'Basis'繼承的部分。這是基本OO'是'繼承關係的結果。 (http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)) – 2010-07-23 14:31:57
非常感謝 – Chan 2010-07-23 14:38:48