Tout d'abord, le typedef
pour une structure ne change rien, il introduit seulement un nom alternatif pour le type. Vous pouvez toujours en hériter comme d'habitude. La syntaxe Type identifier{params}
pour les définitions est la syntaxe C++ 0x pour le nouveau uniform initialization. En pré-C++ 0x, vous avez deux choix pour l'initialisation des types définis par l'utilisateur.
Initialisation globale
Les agrégats sont POD types et les tableaux de PODs ou types intégrés. Ils peuvent être initialisés en utilisant des listes de initialiseur avec des accolades:
struct A {
int i;
};
struct B {
A j;
int k;
};
B b = {{1}, 2 };
Ceci est couvert plus en détail dans ce InformIT article. Comme cela a été noté, ceci ne fonctionne que pour les types POD et ne fonctionne donc pas lorsque l'héritage entre en jeu.
Dans ce cas, vous devez utiliser
constructeurs définis par l'utilisateur
Ils vous permettent d'initialiser vos types personnalisés plutôt librement en définissant les fonctions membres spéciales:
struct A {
int i;
A(int number) : i(number) {}
};
struct B : A {
int j;
B(int number1, number2) : A(number1), j(number2) {}
};
B b(1, 2);
Constructors sont traités plus en détail au this InformIT article.