我有class A
只有私人成員(包括數據,方法,構造函數,析構函數....)。我也有class B
這是class A
的朋友。我希望B的所有派生類(也有從B繼承來的模板)成爲class A
的朋友。有沒有辦法做到這一點?如何製作朋友類的層次結構?
1
A
回答
1
C++不直接支持:"a kid of my friend is not my friend"。
你必須用另一種方式來實現這個;例如,在class B
定義一組的受保護的存取器函數:
class A {friend class B; int x, y};
class B
{
protected:
int& AccessX(A& a) {return a.x;}
int& AccessY(A& a) {return a.y;}
}
這是唯一可行的,如果class A
非常小。
如果class A
很大,您將不得不考慮您想要的是什麼class B
及其派生類與class A
,並將其表示爲一組函數。在class B
其定義爲保護功能:
class A
{
A(): x(42), y(99) {}
friend class B;
int x, y;
}
class B
{
protected:
A Create() {return A();}
void Manage(A& object) {object.x += 1; object.y += 2;}
}
+2
將訪問函數設爲靜態是有意義的,因爲它們不使用類B中的任何內容。 – 2010-12-19 11:54:33
相關問題
- 1. 模板類層次的朋友繼承
- 2. PHP類層次結構 - 層次結構中的最高類
- 3. 類層次結構
- 4. 類層次結構
- 5. NSObject的類層次結構
- 6. 如何設計類層次結構
- 7. 如何使用RPG類層次結構?
- 8. 如何迭代類層次結構?
- 9. IDE如何獲得類層次結構
- 10. 如何處理類層次結構
- 11. C#中的類層次結構:如何正確執行它? ( '朋友' 的關鍵字想)
- 12. 如何製作元組作爲衍生物的結構或層次結構?
- 13. 使用C++的分層結構中的朋友方法
- 14. 擴展類層次結構
- 15. C++類層次結構
- 16. Json Net層次結構類
- 17. Automapper和類層次結構
- 18. LESS CSS類層次結構
- 19. Common Lisp類層次結構
- 20. CSS - 類層次結構?
- 21. 類層次結構(C++)
- 22. ANTLR4:如何控制類的層次結構?
- 23. 如何用java程序製作一個具有層次結構的JSON結構
- 24. 父類和子類的層次結構
- 25. 類層次結構的模板類?
- 26. 層次結構
- 27. 如何製作一個lambda函數的類的朋友?
- 28. 類的朋友
- 29. 如何讓我的朋友和朋友的朋友?
- 30. 如何獲得朋友的朋友的朋友...
爲什麼]]]]]]]]]]] – 2010-12-19 10:49:01
是。使成員'保護'而不是'私人'。 – 2010-12-19 10:50:03
因爲我不希望其他類期望B(和派生類)可以創建和管理A類型的實例。 – 2010-12-19 10:51:29