Почему мы не можем напрямую вызвать конструктор базового класса?

Я попытался вызвать конструктор базового класса внутри конструктора конструктора производного класса. Он работал с конструктором по умолчанию, но конструктор с параметрами не работал. Вот мой код:

      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: ​​это ошибка. И я не могу найти причину этого. Можете ли вы объяснить это для меня? Большое спасибо!

0 ответов

Другие вопросы по тегам