Regras para declarar os construtores
Um construtor tem o mesmo nome de sua classe.Qualquer número de construtores pode ser declarado, sujeito às regras de funções sobrecarregadas.(Para obter mais informações, consulte Sobrecarremento.)
class-name ( argument-declaration-list )
Comentários
O argument-declaration-list pode estar vazia.
C++ define dois tipos especiais de construtores, padrão e copiar os construtores, descritas na tabela a seguir.
Construtores de cópia e padrão
Tipo de construção |
Argumentos |
Objetivo |
---|---|---|
Construtor padrão |
Pode ser chamado sem argumentos |
Construir um objeto padrão do tipo de classe |
Construtor de cópia |
Pode aceitar um único argumento de referência para o mesmo tipo de classe |
Copiar objetos do tipo de classe |
Construtores padrão podem ser chamados sem argumentos.No entanto, você pode declarar um construtor padrão com uma lista de argumentos, desde que todos os argumentos têm padrões.Da mesma forma, os construtores de cópia devem aceitar um único argumento de referência para o mesmo tipo de classe.Pode ser fornecido, fornecido a todos os argumentos subseqüentes têm padrões de mais argumentos.
Se você não fornecer qualquer construtores, o compilador tenta gerar um construtor padrão.Se você não fornecer um construtor de cópia, o compilador tenta gerar um.Esses construtores gerado pelo compilador são consideradas funções de membro público.Se você especificar um construtor de cópia com um primeiro argumento que é um objeto e não uma referência é gerado um erro.
Um construtor padrão gerado pelo compilador configura o objeto (inicializa a vftables e vbtables, conforme descrito anteriormente) e ele chama os construtores padrão para classes base e membros, mas ele executa nenhuma outra ação.Os construtores de classe e membro base são chamados somente se elas existirem, são acessíveis e não são ambíguas.
Um construtor de cópia gerado pelo compilador configura um novo objeto e realiza uma cópia memberwise do conteúdo do objeto a ser copiado.Se existirem a classe base ou construtores de membro, eles são chamados; Caso contrário, a cópia bit a bit será executada.
Se todas as classes base e membro de uma classe type ter construtores de cópia que aceitam uma const argumento, o construtor de cópia gerado pelo compilador aceita um único argumento do tipo consttypee. Caso contrário, o construtor de cópia gerado pelo compilador aceita um único argumento do tipo typee.
Você pode usar um construtor para inicializar um const ou volatile objeto, mas o construtor propriamente dito não pode ser declarada como const ou volatile.A classe de armazenamento somente legal de um construtor é in-line; uso de qualquer outro modificador de classe de armazenamento, incluindo o __declspec palavra-chave, com um construtor faz com que um erro do compilador.
O stdcall convenção de chamada é usado em funções de membro estático e funções globais declaradas com a __stdcall palavra-chave e que não use uma lista de argumentos variável.Quando você usa o __stdcall palavra-chave em uma função de membro não estático, como, por exemplo, um construtor, o compilador usará o thiscall convenção de chamada. "
Construtores de classes base não são herdadas por classes derivadas.Quando um objeto do tipo da classe derivada é criado, ela é construída começando com os componentes de classe base; em seguida, move para os componentes de classe derivada.O compilador usa o construtor da classe cada base como parte do objeto completo é inicializado (exceto em casos de derivação virtual, conforme descrito em Classes Base Inicializando).