Définitions et déclarations externes
Remonter à Syntaxe de déclaration - Index
Les spécificateurs de classe de stockage auto et register ne peuvent pas apparaître dans une déclaration externe. Pour chaque identificateur d'une unité de traduction déclaré avec attribut de liaison interne, une seule définition externe est possible.
Une définition externe est une déclaration externe qui définit aussi un objet ou une fonction ; c'est-à-dire qui alloue aussi de la mémoire. Si un identificateur déclaré avec un attribut de liaison externe est utilisé dans une expression (autre que dans l'opérande de sizeof), il doit exister très exactement pour lui une seule définition externe dans l'ensemble du programme.
Le compilateur C++ autorise des déclarations ultérieures de noms externes, comme des tableaux, des structures et des unions, afin de compléter les informations contenues dans les déclarations existantes. Par exemple :
int a[]; // no size
struct mystruct; // tag only, no member declarators
.
.
.
int a[3] = {1, 2, 3}; // supply size and initialize
struct mystruct {
int i, j;
}; // add member declarators
Le diagramme de syntaxe suivant couvre la syntaxe de la déclaration d'une classe. Dans la section relative aux classes (commençant par Classes), vous trouverez quelques exemples de déclaration d'une classe. Références lvalue décrit en détail les types référence lvalue C++ (en rapport avec les types pointeur). Enfin, reportez-vous à Utilisation des templates pour une description des classes de type template.
Syntaxe des déclarations de classes C++Builder (C++ seulement)
class-specifier:
class-head { <member-list> }
class-head:
class-key <identifier> <base-specifier>
class-key class-name <base-specifier>
member-list:
member-declaration <member-list>
access-specifier : <member-list>
member-declaration:
<decl-specifiers> <member-declarator-list>;
function-definition <;>
qualified-name ;
member-declarator-list:
member-declarator
member-declarator-list, member-declarator
member-declarator:
declarator <pure-specifier>
<identifier> : constant-expression
pure-specifier:
= 0
member-initializer-list:
member-initializer
member-initializer , member-initializer-list
member-initializer:
class-name ( <argument-list> )
identifier ( <argument-list> )
operator-function-name:
operator operator-name
base-specifier:
: base-list
class-name
virtual <access-specifier> class-name
access-specifier <virtual> class-name
base-list:
base-specifier
base-list , base-specifier
access-specifier:
private
protected
public
conversion-function-name:
operator conversion-type-name
conversion-type-name:
type-specifiers <pointer-operator>
constructor-initializer:
:member-initializer-list
operator-name: one of
new delete sizeof typeid
+ - * / % ^
& | ~ ! = <>
+= -= =* /= %= ^=
&= |= << >> >>= <<=
== != <= >= && ||
++ __ , ->* -> ()
[ ] .*