Como você usa o construtor não padrão para um membro?
-
21-09-2019 - |
Pergunta
Eu tenho duas aulas
class a {
public:
a(int i);
};
class b {
public:
b(); //Gives me an error here, because it tries to find constructor a::a()
a aInstance;
}
Como posso obtê -lo para que o Ainstance seja instanciado com um (int i) em vez de tentar procurar um construtor padrão? Basicamente, quero controlar o chamado do construtor de A do construtor de B.
Solução
Você precisa ligar para uma (int) explicitamente na lista inicial do construtor:
b() : aInstance(3) {}
Onde 3 é o valor inicial que você gostaria de usar. Embora possa ser qualquer int. Veja comentários para notas importantes sobre ordem e outras advertências.
Outras dicas
Use uma lista de inicialização:
b::b() : aInstance(1) {}
Basta usar um construtor que é definido assim:
class b {
public:
b()
: aInstance(5)
{}
a aInstance;
};
Eu acho que você deveria usar um ponteiro para 'um' como:
class b {
public:
b() : aInstance(new a(5)) {}
a *aInstance;
};
Dessa forma, você terá comportamento definido. Claro que você precisará libertar *Ainstance no destruidor.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow