2010-05-26 12 views
0

J'ai besoin d'aide pour les structures, l'héritage et la définition.structures, héritage et définition

//define struct 
struct tStruct1{ 
    int a; 
}; 

//definition 
tStruct1 struct1{1}; 

et l'héritage

struct tStruct2:tStruct1{ 
    int b; 
}; 

Comment puis-je définir dans la ligne de déclaration? Une autre question, comment puis-je utiliser l'héritage pour les structures définies avec typedef struct?

Répondre

4

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.