Inicializando objetos membros
Classes podem conter objetos de membros do tipo de classe, mas para garantir que os requisitos de inicialização para os objetos de membro são atendidos, uma das seguintes condições deve ser atendida:
Classe do objeto contidos não requer nenhum construtor.
Classe do objeto contidos tem um construtor padrão acessível.
Construtores da classe que contém todos os explicitamente inicializar o objeto contido.
O exemplo a seguir mostra como executar uma inicialização tal:
// 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()
{
}
O Rect classe, mostrada no exemplo anterior, contém dois objetos de membro da classe Point.Seu construtor inicializa explicitamente os objetos _topleft e _bottomright.Observe que os dois-pontos segue o parêntese de fechamento do construtor (na definição).Os dois-pontos seguido os nomes de membro e os argumentos com o qual se inicializa os objetos do tipo Point.
Observação |
---|
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 elas são declaradas na classe. |
Referência e const objetos membros devem ser inicializados usando a sintaxe de inicialização de membro mostrada na seção de gramática em Inicializando Bases e membros.Não há outra maneira de inicializar esses objetos.