web-dev-qa-db-fra.com

Définir une structure dans une classe en C++

Quelqu'un peut-il me donner un exemple sur la façon de définir un nouveau type de struct dans une classe class en C++?.

Merci.

46
small_potato

Quelque chose comme ça:

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

déclarer la classe et la structure imbriquée probablement dans un fichier d'en-tête

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);
};

si vous voulez séparer l'implémentation/définition, peut-être dans un fichier CPP

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

si vous souhaitez intégrer la mise en œuvre, d'autres réponses suffiront.

46
Afriza N. Arief

Quelque chose comme:

class Tree {

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

Les autres réponses ici ont montré comment définir des structures à l'intérieur de classes. Il existe un autre moyen de le faire, et cela consiste à déclarer la structure dans la classe, mais définir il à l’extérieur. Cela peut être utile, par exemple, si la structure est décemment complexe et susceptible d’être utilisée seule d’une manière qui gagnerait à être décrite en détail ailleurs.

La syntaxe pour cela est la suivante:

class Container {

    ...

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

    ...

};

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

Vous verriez plus souvent cela dans le contexte de la définition de classes imbriquées plutôt que de structures (un exemple courant serait la définition d'un type d'itérateur pour une classe de collection), mais j'ai pensé que pour être complet, il serait intéressant de le montrer ici.

0
templatetypedef