2016-11-10 347 views
0

考慮一類如下所示:C++使得構造函數的嵌套類

class A { 
    public: 
    // code... 

    private: 
    class B { 
     public: 
     int aNum; 
     // ... 
    } 
} 

而且我做一個爲一些構造,如:

A::A() { } // default... 

A::A(int input) { /* code... */ } 

所以我不知道如何以訪問aNum,因爲它不直接根據A.

+3

要訪問'aNum',您需要一個'A :: B'對象,您尚未聲明任何地方。 – aschepler

+0

'B'本身就是一個類,它不是A的子集或依賴關係。使用'class B {'它在哪裏,並且完全不在'A'之外的唯一區別就是你引用了類通過'A :: B'而不是':: B'。 (具有相關的訪問權限) –

回答

0

由於一些評論狀態,你不能只是從A「訪問」aNum,因爲它是01的一部分。

你要麼需要內A創建B對象,並設置在B對象的值或者您需要從B移動aNumA

如果在A內創建B對象,則看起來像這樣。

struct A { 
    A(int input) { 
     bObj.aNum = input; 
    } 

    // ... 

private: 
    struct B { 
     int aNum; 
     // ... 
    }; 

    B bObj; 
}; 

你應該想一想如果aNum確實是一個嵌套類的一部分,如果你想從A直接訪問它。在這種情況下,您的班級設計很可能是錯誤的,並且aNum確實是A的一部分,而不是B

+0

我會給'B'自己的構造函數初始化'aNum',然後'A'的構造函數可以使用它的初始化列表初始化'bObj':'A(int input):bObj(input ){}' –

0

它就像你的類中的任何數據成員,它沒有什麼不同

class A { 
    public: 
    // code... 

    private: 
    class B { 
     public: 
     int aNum; 
    } 
} 

,然後才能訪問aNum這是類的非靜態數據成員B你必須創建B類型的對象像這樣的:

class A 
{ 
    public: 
     const B& getObjectB() const { return objectB; }; 
    private: 
     B objectB; 
} 

用,你可以這樣做:

A objectA; 
objectA.getObjectB().aNum; 

這裏發生的是我們稱之爲getObjectB(),它返回objectB,然後通過那個呼叫aNum

0

需要某種方式來引用類型B的對象,這裏是一個簡單的例子。

class A { 
    private: 
     class B { 
     public: 
      int aNum; 
     }; 
     B b; 
    public: 
     A(int); 
}; 
A::A(int input) { 
    b.aNum = input; 
}