Partager via


Syntaxe de déclaration de membre de classe

Les membres de données de classe et les membres de fonction sont généralement déclarés après les règles des déclarations. Ils se composent, dans l'ordre, des éléments suivants :

  • Des spécificateurs de déclaration. Dans les classes, les spécificateurs de classe de stockage static et mutable sont autorisés pour les membres de données. Les qualificateurs cv const et volatile sont autorisés pour les membres de données et de fonction. Les spécificateurs de déclaration friend, static, virtual et inline sont autorisés pour les fonctions, bien que friend indique une fonction non-membre.

  • Des déclarateurs sans initialiseurs. Dans le cas des fonctions virtuelles, le spécificateur pur de la forme = 0 est utilisé après le déclarateur de fonction pour spécifier une fonction virtuelle pure (une fonction virtuelle sans implémentation dans cette classe).

  • Éventuellement, des champs de bits. Reportez-vous à Champs de bits.

OU

  • Des définitions de fonctions. La définition d'une fonction peut être incluse dans la classe. Si une fonction membre est définie ainsi, elle est automatiquement considérée comme inline.

OU

Les données membres ne peuvent pas être déclarées comme classe de stockage auto, extern ni register. Elles peuvent, toutefois, être déclarées comme ayant une classe de stockage static.

Lorsque vous déclarez une classe friend dans une liste de membres, vous pouvez omettre la liste des déclarateurs de membre. Pour plus d'informations sur les classes friend, consultez Spécificateur friend et Friends. Même si le nom d'une classe n'a pas été introduit, il peut être utilisé dans une déclaration friend. Cette déclaration friend introduit le nom. Toutefois, les déclarations de membre pour ces classes doivent utiliser la syntaxe élaborée de spécificateur de type, comme indiqué dans l'exemple suivant :

// class_member_declaration_syntax.cpp
// compile with: /c
struct HasFriends {
   friend class NotDeclaredYet;
};

Dans l'exemple précédent, aucune liste de déclarateurs de membres ne figure après la déclaration de classe. Comme la déclaration pour NotDeclaredYet n'a pas encore été traitée, la forme élaboré de spécificateur de type est utilisée : class NotDeclaredYet. Un type qui a été déclaré peut être spécifié dans une déclaration de membre friend à l'aide d'un spécificateur de type normal :

// class_member_declaration_syntax2.cpp
// compile with: /c
struct AlreadyDeclared {};

struct HasFriends {
   friend AlreadyDeclared;
};

Le spécificateur pur (illustré dans l'exemple suivant) indique qu'aucune implémentation n'est fournie pour la fonction virtuelle actuellement déclarée. Par conséquent, le spécificateur pur peut être spécifié uniquement sur des fonctions virtuelles. Considérez cet exemple :

// class_member_declaration_syntax3.cpp
// compile with: /c
class StrBase {   // Base class for strings.
public:
   virtual int IsLessThan( StrBase& ) = 0;
   virtual int IsEqualTo( StrBase& ) = 0;
   virtual StrBase& CopyOf( StrBase& ) = 0;
};

Le code précédent déclare une classe de base abstraite (autrement dit, une classe conçue pour être utilisée uniquement comme classe de base pour des classes plus spécifiques). Ces classes de base peuvent appliquer un protocole particulier, ou un ensemble de fonctionnalités, en déclarant une ou plusieurs fonctions virtuelles comme fonctions virtuelles « pures », à l'aide du spécificateur pur.

Les classes qui héritent de la classe StrBase doivent fournir des implémentations pour les fonctions virtuelles pures ; dans le cas contraire, elles aussi sont considérées comme des classes de base abstraites.

Les classes de base abstraites ne peuvent pas être utilisées pour déclarer des objets. Par exemple, avant qu'un objet d'un type hérité de StrBase puisse être déclaré, les fonctions IsLessThan, IsEqualTo et CopyOf doivent être implémentées. (Pour plus d'informations sur les classes de base abstraites, consultez Classes abstraites.)

Voir aussi

Référence

Membres de classe