簡體   English   中英

基類和派生類的朋友功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM