У меня есть код, который идти как этотC++ конструктор класса и деструктор
class A_
{
public:
int k;
A_(int a):k(a)
{cout<<"A_'s constructor called"<<endl;
}
virtual ~A_()
{
cout<<"class A_ destructor"<<endl;
}
virtual void getval() { cout<<k<<endl;}
};
class A : public A_
{
public:
int m;
A(int a):A_(2),m(a){cout<<"A's constructor called"<<endl;}
virtual void getval()
{
cout<<"m is "<<m<<endl;
}
~A()
{
cout<<"class A destructor"<<endl;
}
};
int main()
{
A A1(1);
A_(2);
cin.get();
}
Когда я запускаю этот код, я получаю результат, который идет как это (программа достигнутую до cin.get()
)
A_'s constructor called
A's constructor called
A_'s constructor called
class A_ destructor
Я ожидала, что объект A_, созданный в рамках класса А должны быть уничтожены сразу же, как в случае, когда A_(2)
в main()
выполняется, но это не происходит. Объект A_
уничтожается только тогда, когда программа доходит до конца (после ввода текста в качестве входных данных)
class A destructor
class A_ destructor
Вопрос:
1) Почему объект A_
класса создан вместе с A
объект не сразу уничтожается?
2) Есть ли обстоятельства, когда объект базового класса вызывает метод производного класса? В частности, существует возможность для объекта A_
позвонить по телефону getval()
объекта A
?
Знаете ли вы, что такое наследование и как оно работает? Чтобы ответить на ваш второй вопрос - да, именно на этом основан полиморфизм. – littleadv
@littleadv. Вы правы, мое понимание наследования не было полным, я думал, что объект базового класса создается в объекте производного класса, мне не приходило в голову, что конструктор базового класса требуется для инициализации производной формы элементов данных базовый класс. Спасибо за подсказку. – Gautam