Я понимаю основную концепцию виртуальной функции и виртуальные таблицы, , но в следующем примере, я не понимаю, почему c.A();
печатаетвызов виртуальной функции в функции-члена класса
parent A
child
но без виртуального ключевого слова для Parent :: FUNC(), он печатает
parent A
parent
ли вы дайте мне знать причину в деталях? Было бы здорово объяснить с помощью таблицы v, памяти (кучи, стека) и т. Д.
Спасибо.
#include <iostream>
template <class TYPE> class Parent
{
public:
Parent() {};
~Parent() {};
virtual void func() { std::cout << "parent" << std::endl; };
void A() {
std::cout << "parent A" << std::endl;
func();
}
};
template <class TYPE> class Child : public Parent <TYPE>
{
public:
Child() {};
~Child() {};
void func() { std::cout << "child" << std::endl; };
};
void main()
{
Child<int> c;
c.A();
}