Уважаемый сэр!
Я должен сказать вам, что я знаю и что я не знаю о заданном вопросе, чтобы вы могли обратиться к слабой области моего понимания.
Я знаю, что C ++ реализует полиморфизм с помощью Vtable, который является массивом указателей.
каждый указатель указывает на виртуальную функцию класса, у каждого класса в иерархии есть vtable. теперь предположим, что у меня есть следующий класс
class person
{
char name[20];
public:
person(char* pname)
{
strcpy(name,pname);
}
virtual void show()
{
cout<<"inside person show method, Name: "<<name;
}
};
class teacher:public person
{
int scale;
teacher(char*pname, int s):person(pname)
{
scale=s;
}
void show()
{
cout<<"inside the teacher show method, Scale: "<<scale;
}
};
теперь предположим, что я пишу в основной программе
person *ptr;
ptr=new teacher(16,"Zia");
ptr->show();
Теперь я запутался в этой точке, вызов перейдет к функции show базового класса, теперь, поскольку это виртуальная функция, поэтому она вызывает функцию подходящего типа. Я знаю, что я не прав здесь. Я запутался, что будет последовательность звонков. Какова роль Vtable и как она работает, уточните.