2010-12-19 79 views
1

我有class A只有私人成員(包括數據,方法,構造函數,析構函數....)。我也有class B這是class A的朋友。我希望B的所有派生類(也有從B繼承來的模板)成爲class A的朋友。有沒有辦法做到這一點?如何製作朋友類的層次結構?

+1

爲什麼]]]]]]]]]]] – 2010-12-19 10:49:01

+1

是。使成員'保護'而不是'私人'。 – 2010-12-19 10:50:03

+0

因爲我不希望其他類期望B(和派生類)可以創建和管理A類型的實例。 – 2010-12-19 10:51:29

回答

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