2012-01-24 13 views
7

他のクラスのクラスをプライベートに定義して配列として使用することはできますか?たとえば:別のクラス内のクラスをC++でプライベートに定義する方法

class a 
{ 
    public: 
    private: 
    class b; 
    b myarray[10]; 

    class b 
    { 
     public: 
     b(int a):a_val (a){} 
     private: 
     int a_val; 
    }; 
}; 

私の構文に何か間違いがありますか?

メンバー関数をAで作成して、bのプライベート値を変更することもできますか?たとえば、myarray [0] .a_val = 5;もしそうなら、この構文も正しいですか?

+0

あなたは 'b'のコンストラクタに' a'という 'int'引数がありますが、' a'というクラスもあります。これは混乱しています。 – Foggzie

答えて

0

はい、他のクラスの内部でクラスを非公開で宣言できます。

はい、配列を作成する場所にクラス自体が表示されている場合は、配列の型として使用できます。

0

いいえ、完全に問題ありません。それはちょうどあなただけやってから人々を停止する、クラスAの中にBのインスタンスを宣言することができることを意味:

a::b myB; 

は、おそらくあなたが望むものである自分のbは、宣言します。

5

いいえ、プライベートネストされたクラスを定義する構文は問題ありません。他にもいくつか間違っていますが、配列を作成する前にbを定義する必要があります。タイプは完全である必要があります。

bはデフォルトコンストラクタブルではありませんので、aコンストラクタ初期化子リストで配列を初期化する必要があります。これは実際にはC++ 03では不可能です。 C++ 11はその機能を得るためのイニシャライザリストを提供します。

std::vectorまたはstd::arrayを使用してください。

あなたのコードの修正版:

class a 
{ 
public: 
    // ATTN C++11 feature here 
    a() : myarray({ 1, 2}) {} 
private: 
    class b { 
    public: 
    b(int a) : a_val (a){} 
    int a_val; 
    }; 
    b myarray[2]; 
}; 
int main() 
{ 
    a a; 
} 
2

はい、それは大丈夫ですが、あなたはそれの配列を宣言する前に、完全に入れ子になったクラスを定義する必要があります。配列は唯一完全種類で作ることができます。

class Outer 
{ 
    class Inner { /* define it! */ }; 
    Inner a[100]; 
}; 
関連する問題