[英]friend function of base class and derived class
我有一個基類Fraction和一個派生類iFraction。 分數代表不合適的分數,iFraction代表混合的分數。
class Fraction {...};
class iFraction : public Fraction {...};
現在,我想聲明這兩個類的朋友函數,即convertF。 函數convertF可以將不正確的分數(分數)轉換為混合分數(iFraction)。 我有多冷? 實際上,我想這樣聲明函數:
friend iFraction convertF (Fraction &Fra);
但是,不能在基本校准分數中聲明它。 為什么?
由於不繼承friend
關系,因此需要將convertF
聲明為兩個類的朋友。 但是,只有在函數需要訪問這些類的內部信息時,才需要使用此方法-您確定這些類的公共接口不夠用嗎?
嘗試避免這種雙重朋友的另一個原因是,它將通過convertF
的簽名在這些類之間創建循環依賴關系。
更新:這就是為什么您無法按照上面顯示的方式聲明朋友功能的原因。 為此,編譯器需要知道iFraction
的完整定義,而仍無法完成基類Fraction
的定義,這是不可能的。
從技術上講,它可以通過向前聲明iFraction
。 盡管我仍然認為這不是一個好的解決方案。 您確定您的類層次結構正確嗎?
您不需要朋友功能。 有兩種方法可以使用dynamic_cast或編寫一個轉換構造函數,該構造函數接受一個Fraction對象並將其轉換為iFraction對象。 我不確定第二個選項是否完全是一個不錯的選擇,但可以嘗試一下。
請閱讀以下內容: http : //www.cprogramming.com/tutorial/friends.html
始終首先嘗試理解概念。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.