2011-12-21 12 views
1

クラス宣言をヘッダファイルに書き込んで、後でそれを定義するのが好きです。後でヘッダ内にインライン化できるようにするか、あるいはcppで後で定義することができます。このようにして、私はクラス宣言をきちんとした目で保ちます。クラスをクラス内で宣言して後で定義するにはどうすればいいですか?

しかし、私はクラス(イテレータ)

内のクラスを作りたいが、それはクラス内でそれを宣言し、後でそれを定義することは可能ですか? どのようにですか?

答えて

3

はい、あなただけなし(実用的)制限はありません

このような

// A.h 

class A { 
public: 
    class B { 
    public: 
     B() { } 

     void dostuff(); 
    }; 

    A() { } 

    void doStuff(); 
}; 

// A.cpp 

void A::doStuff() { 
    // stuff 
} 

void A::B::doStuff() { 
    // stuff 
} 

A a; 
a.doStuff(); 

A::B b; 
b.doStuff(); 
、含まれているクラスの名前と、その後スコープ解決演算子、 ::、および内部クラスの名前を追加する必要がありますいくつかのネストされたクラスに追加することができます。 ::をさらに進んでさらに進んでください。

+0

しかし、すべてのメソッドとメンバを認識する必要がありますか?私は 'class SomeIterator;'をクラスの中に書くことはできないのですか? – xcrypt

+0

@xcryptこれは 'class SomeIterator;とほぼ同じです。クラスA {...}; '前方宣言はクラス' A'宣言の外側には表示されません。だから、上記のことが 'class SomeIterator;' –

+0

@xcryptでやっていることはできません。これは 'void a(){void b(); } '関数' b'が 'a'の内部にあるとは言わないが、これはaの外側にあり、' void b();と同じ関数の前方宣言である。 void a(){} 'の外側のものは前方宣言を見ることができません。私は参照してください。 –

関連する問題