Я искал это, и я удивлен, что ничего не нашел. Почему я не могу наследовать конструктор базового класса с использованием объявления using
и добавить перегрузку в производном классе? Я использую Visual C++ 2013, конструктор базового класса игнорируется, если по умолчанию, построения b
:Inherit and overload default constructor
error C2512: 'B' : no appropriate default constructor available
Я имел дело с этим путем повторного определения конструкторов, но мне не нравится это. Это всего лишь минимальный пример, это не беспокоило бы меня, если бы у меня был только один конструктор базового класса.
struct A
{
A() : a(10) {}
int a;
};
struct B : A
{
using A::A;
explicit B(int a) { this->a = a; }
};
int main()
{
B b;
}
Это правильный код. См. Http://stackoverflow.com/questions/9979194/what-is-constructor-inheritance. –
@RSahu Это было бы правильно без другого конструктора в 'B'. – 0x499602D2
@ 0x499602D2, это было бы глупо - не позволять 'B' добавлять больше конструкторов только потому, что наследует конструкторы от' A'. –