Почему мы не можем напрямую вызвать конструктор базового класса?
Я попытался вызвать конструктор базового класса внутри конструктора конструктора производного класса. Он работал с конструктором по умолчанию, но конструктор с параметрами не работал. Вот мой код:
class A
{
protected:
int a;
public:
A()
{
a=1;
cout<<"a"<<endl;
}
A(int x)
{
a=x;
cout<<"a - x"<<endl;
}
};
class B:public A
{
protected:
int b;
public:
B()
{
A();//case 1
b=2;
cout<<"b"<<endl;
}
B(int x)
{
A::A(x); // Case 2: it throws an exception "cannot call constructor 'B::A' directly"
b=x;
cout<<"b - x"<<endl;
}
};
int main()
{
//B h; Case 1
B h(9); //Case 2
}
В случае 1: результат
a a b
Это означает, что он вызывает конструктор A() дважды (один раз автоматически и один раз мной). Таким образом, конструктор может быть вызван более чем одним. Но в случае 2: это ошибка. И я не могу найти причину этого. Можете ли вы объяснить это для меня? Большое спасибо!