Eu tenho este código de exemplo:
#include <iostream>
class A
{
public:
A()
{
std::cout << "Default constructor of A" << '\n';
}
A(int i)
{
std::cout << "Inside the constructor of A with one int argument" << '\n';
}
A(double i)
{
std::cout << "Inside the constructor of A with one double argument" << '\n';
}
};
class B : A
{
using A::A;
public:
B()
{
std::cout << "Default constructor of B" << '\n';
}
};
int main()
{
B b(12);
std::cout << "End of main";
}
E a saída é:
Inside the constructor of A with one int argument
End of main
Entendo por que B
o construtor s não é chamado (consulte Herança do construtor em C++. O construtor padrão da classe derivada não está sendo chamado ) e posso escrever a B(int)
, mas o problema é que A
tem muitos construtores e ao construir um B
quero que o A
construtor correspondente seja chamado e um B
construtor específico.
Como posso conseguir isso sem escrever um B
construtor para cada A
construtor?
Em outras palavras, quero que a saída B b(12)
seja
Inside the constructor of A with one int argument
Default constructor of B
End of main
e também B b(4.2)
para ser
Inside the constructor of A with one double argument
Default constructor of B
End of main
sem reescrever o construtor B
muitas vezes.