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.

Foi útil?

Solução

  1. Na realidade, C c(); deve ser analisado como um declaração de função. Para invocar explicitamente o construtor padrão, você precisa escrever C c = C();.
  2. 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.
  3. 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
scroll top