ich das grundlegende Konzept der virtuellen Funktion und VTable verstehen, aber im folgenden Beispiel, ich verstehe nicht, warum c.A();
drucktvirtueller Funktionsaufruf innerhalb einer Elementfunktion der Klasse
parent A
child
, aber ohne das Schlüsselwort virtual für Eltern :: func(), druckt er
parent A
parent
heraus Würden Sie mich im Detail kennen den Grund lassen? Es wäre großartig, mit v-Tabelle, Speicher (Heap, Stack) usw. zu erklären.
Danke.
#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();
}