Определить структуру внутри класса в C ++ - PullRequest
48 голосов
/ 30 марта 2010

Может кто-нибудь привести пример того, как определить новый тип struct в классе в C ++.

Спасибо.

Ответы [ 4 ]

72 голосов
/ 30 марта 2010

Примерно так:

class Class {
    // visibility will default to private unless you specify it
    struct Struct {
        //specify members here;
    };
};
47 голосов
/ 30 марта 2010

объявление класса и вложенной структуры, вероятно, в каком-то заголовочном файле

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
}

если вы хотите встроить реализацию, другие ответы подойдут.

6 голосов
/ 30 марта 2010

Что-то вроде:

class Tree {

 struct node {
   int data;
   node *llink;
   node *rlink;
 };
 .....
 .....
 .....
};
0 голосов
/ 25 декабря 2018

Другие ответы здесь продемонстрировали, как определять структуры внутри классов. Есть еще один способ сделать это: объявить структуру внутри класса, но определить ее снаружи. Это может быть полезно, например, если структура довольно сложна и может использоваться автономно, так что было бы полезно ее подробное описание где-то еще.

Синтаксис этого следующий:

class Container {

    ...

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

    ...

};

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

Вы бы чаще видели это в контексте определения вложенных классов, а не структур (типичным примером было бы определение типа итератора для класса коллекции), но я подумал, что для полноты изложения здесь стоит показать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...