Inicializando objetos de membro
As classes podem conter objetos do membro do tipo de classe, mas para garantir que os requisitos de inicialização para os objetos de membro sejam atendidos, é necessário atender a uma das seguintes condições:
A classe de objeto contido não requer construtores.
A classe de objeto contido tem um construtor padrão acessível.
Todos os construtores da classe recipiente inicializam explicitamente o objeto contido.
O exemplo a seguir mostra como realizar essa inicialização:
// 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()
{
}
A classe Rect, mostrada no exemplo anterior, contém dois objetos membros da classe Point. O construtor inicializa explicitamente os objetos _topleft e _bottomright. Observe que o sinal de dois pontos aparece após o parêntese de fechamento do construtor (na definição). O sinal de dois pontos é seguido pelos nomes e os argumentos do membro, com os quais será realizada a inicialização dos objetos do tipo Point.
Dica
A ordem na qual os inicializadores de membro são especificados no construtor não afeta a ordem na qual os membros são construídos; os membros são construídos na ordem em que são declarados na classe.
A referência e os objetos do membro const devem ser inicializados usando a sintaxe de inicialização do membro mostrada na seção da gramática em Inicializando bases e membros. Não há outra maneira de inicializar esses objetos.