Initialiser des objets membres
Les classes peuvent contenir des objets membres du type de classe, mais pour garantir que les demandes d'initialisation pour les objets membres sont respectées, l'une des conditions suivantes doit être remplie :
La classe d'objet contenu ne requiert pas de constructeur.
La classe d'objet contenu a un constructeur par défaut accessible.
Tous de la classe conteneur les constructeurs initialisent explicitement l'objet contenu.
L'exemple de code suivant montre comment effectuer une telle initialisation :
// spec1_initializing_member_objects.cpp
// Declare a class Point.
class Point
{
public:
Point( int x, int y ) { _x = x; _y = y; }
private:
int _x, _y;
};
// Declare a rectangle class that contains objects of type Point.
class Rect
{
public:
Rect( int x1, int y1, int x2, int y2 );
private:
Point _topleft, _bottomright;
};
// Define the constructor for class Rect. This constructor
// explicitly initializes the objects of type Point.
Rect::Rect( int x1, int y1, int x2, int y2 ) :
_topleft( x1, y1 ), _bottomright( x2, y2 )
{
}
int main()
{
}
La classe d' Rect , illustrée dans l'exemple précédent, contient deux objets membres de classe Point.son constructeur initialise explicitement les objets _topleft et _bottomright.Notez qu'un signe deux-points suit la parenthèse fermante du constructeur (dans la définition).Le point est suivi par des noms de membres et les arguments avec lesquels initialiser des objets de type Point.
[!REMARQUE]
L'ordre dans lequel les initialiseurs membres sont spécifiés dans le constructeur n'affecte pas l'ordre dans lequel les membres sont construits ; les membres sont construits dans l'ordre dans lequel ils sont déclarés dans la classe.
La référence et les objets membres de const doivent être initialisés à l'aide de la syntaxe d'initialiseurs de membre représentée dans la section de syntaxe dans initialiser des bases et des membres.Il n'existe aucune autre façon d'initialiser ces objets.