2013-05-29 117 views
0

我有一個簡單的C++問題C++類,但我不知道如何解決這個問題。問題脫鉤嵌套

我有兩個類,A和B中未繼承的反正。 A是客戶端類,B是存儲客戶端(A類)列表的類。

我想只有B到實例並摧毀B類,但我想我的代碼的其他部分能夠調用類A中的方法

起初我有以下幾點:

class B { 
public: 
    class A { 
     public: 
      void setX(int val); 
      int getX(); 
     private: 
      int x; 
      A(); 
      ~A(); 
    }; 

    B() 
    ~B() 
    .... 
}; 

這讓我打電話給從B A的構造函數/析構函數,並使得A的構造函數/析構函數從其他私人的,但調用setX的(對A)和信息getX()成爲麻煩,因爲我有打電話給B ::一個。

我認爲把一個在它自己的文件(它自己的類,而不是嵌套的),其他類可以調用A.方法但是現在B不能訪問A的構造函數/析構函數,因爲它是私有的。如果我把它公開,那麼任何人都可以創建A級

的對象我不知道什麼是做到這一點的最好辦法。如果A是它自己的類,那麼我怎樣才能讓構造函數/析構函數僅對B可用,而其他類可以從A對象上調用setX()和getX()?

回答

2

聲明在其自己的,非嵌套類,但與朋友B類的應該做的伎倆。

Friend classes

留給你:

class B{ 
public: 
    B() 
    ~B() 
    .... 
}; 

class A { 
    friend class B; 
    public: 
     void setX(int val); 
     int getX(); 
    private: 
     int x; 
     A(); 
     ~A(); 
}; 
+0

謝謝你,這個工作就像一個魅力!現在我知道如何使用「朋友」關鍵字,非常感謝! – user1777907

0

我想你可能搞砸了(或者在讀你的榜樣,當我做:P)。

聲明一個嵌套類使嵌套類能夠訪問ne的所有成員根據你的解釋我可以理解,而不是相反。
我的意思是:一個內B表示B的訪問人成員,而不是逆!
Nested Classes Question(Check second response, not first!)

如果你的問題時說:「我想只有B到實例並摧毀B類」你的意思是「我想只有B到實例化和銷燬A類」,那麼你有兩個選擇。

您可以讓乙嵌套類A的,讓B分別接入人進行的 的私人東西或使用友元類。(檢查@Egg響應)