construtor com um parâmetro padrão
-
25-09-2019 - |
Pergunta
Suponha que eu tenha uma aula
class C {
C(int a=10);
};
Por que eu ligar
C c;
o contrato C(int =10)
é chamado e se eu ligar
C c();
O construtor padrão é chamado? Como evitar isso? Quero executar apenas meu construtor, tentei tornar o construtor padrão privado, mas não funciona.
Solução
- Na realidade,
C c();
deve ser analisado como um declaração de função. Para invocar explicitamente o construtor padrão, você precisa escreverC c = C();
. - Depois de definir qualquer construtor, o compilador irá não fornecer um construtor padrão Para o seu tipo, para que ninguém possa ser chamado.
- Como o seu construtor pode ser chamado com um argumento, ele serve como uma função de conversão implícita. Você deve considerar fazer isso
explicit
, para evitar que conversões implícitas iniciem momentos inesperados.
Outras dicas
O código C c();
não faz o que você acha que faz:
Declara uma função chamada c
Isso não leva argumentos e retorna um C
. É equivalente a
C c(void);
Isso é porque o c()
é interpretado como uma função nomeada c
. C()
acionará o construtor apropriado para o C
classe
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow