web-dev-qa-db-ja.com

C ++のクラス内で構造体を定義する

C++のclassで新しいタイプのstructを定義する方法の例を教えてください。

ありがとう。

48
small_potato

このようなもの:

class Class {
    // visibility will default to private unless you specify it
    struct Struct {
        //specify members here;
    };
};
72
sharptooth

おそらくいくつかのヘッダーファイルでクラスとネストされた構造体を宣言する

class C {
    // struct will be private without `public:` keyword
    struct S {
        // members will be public without `private:` keyword
        int sa;
        void func();
    };
    void func(S s);
};

実装/定義を分離したい場合、おそらくCPPファイルで

void C::func(S s) {
    // implementation here
}
void C::S::func() { // <= note that you need the `full path` to the function
    // implementation here
}

実装をインライン化する場合は、他の回答でも問題ありません。

47
Afriza N. Arief

何かのようなもの:

class Tree {

 struct node {
   int data;
   node *llink;
   node *rlink;
 };
 .....
 .....
 .....
};
6
codaddict

ここでの他の回答は、クラス内で構造体を定義する方法を示しています。これを行う別の方法があり、それはdeclareクラス内の構造体ですが、defineそれは外部です。これは、たとえば、構造体がかなり複雑で、他の場所で詳細に説明することでメリットが得られる方法でスタンドアロンで使用される可能性がある場合に役立ちます。

この構文は次のとおりです。

class Container {

    ...

    struct Inner; // Declare, but not define, the struct.

    ...

};

struct Container::Inner {
   /* Define the struct here. */
};

より一般的には、構造体ではなくネストされたクラスを定義するコンテキストでこれを見るでしょう(一般的な例はコレクションクラスの反復子型を定義することです)が、完全を期すためにここで披露する価値があると思いました。

2
templatetypedef