2010-12-19 11 views
21

私はそうのような入れ子になったクラスを使用している場合:入れ子のクラスの定義

class MyClass 
    { 
    class NestedClass 
    { 
    public: 
     // nested class members AND definitions here 
    }; 

    // main class members here 
    }; 

は現在、MyClassの定義はCPPファイルにあるがNestedClassの定義はヘッダファイル内にある、つまり、 CPPファイルに関数/コンストラクタを宣言することはできません。

私の質問は、どのように私はNestedClassの機能をcppファイルに定義するのですか?私ができないなら、理由は何か(もしそうならば、なぜこれが起こるのか曖昧な考えがありますが、私は良い説明をしたいと思います)。構造はどうですか?

答えて

40

できます。あなたの内部クラスのような方法がある場合:

class MyClass { 
    class NestedClass 
    { 
    public: 
     void someMethod(); 
    }; 

    // main class members here 
    }; 

を...そして、あなたはとても似.cppファイルで定義することができます。

void MyClass::NestedClass::someMethod() { 
    // blah 
} 

構造は、C++のクラスとほぼ同じものです - 彼らのアクセスのために単に 'public'にデフォルト設定されています。彼らはクラスのように他のすべての点で扱われます。

あなたはが(コメントで述べたように)ちょうど例えば、内部クラスを宣言することができます。

class MyClass { 
    class NestedClass; 
    // blah 
}; 

..andその後、実装ファイルで定義する:あなたは何を意味する

class MyClass::NestedClass { 
    // etc. 
}; 
+0

"他の内なる階級のように"ではない? –

+0

@Alf:「not」と書いたのはどこですか? – sje397

+0

申し訳ありませんが、私の目は明らかに交差しています。あなたが最後の文章で何を意味しているのか疑問に思っています。つまり、内部クラスは外部クラス内で定義する必要はありません(通常のPIMPLイディオムはそれに依存しています)。そして、それはあなたが最後の文章で書いていることと一見矛盾するので、文字通り書かれているもの以外の何かを意味するでしょうか? Cheers、 –

関連する問題