У меня есть базовый класс с виртуальной функцией void function1 (), который переопределяется в производном классе. Кроме того, в моем производном классе есть еще одна виртуальная функция, как показано ниже.
class Base
{
public:
virtual void function1()
{
cout<<"Base::Virtual function1"<<endl;
}
};
class Derived1:public Base
{
public:
void function1()
{
cout<<"Derived1::Function1"<<endl;
}
virtual void function2()
{
cout<<"Derived1::function2"<<endl;
}
};
int main()
{
Base *bptr = new Derived1();
Derived1 *dptr = new Derived2();
bptr->function2(); //compile time error
return 0;
}
Я хочу знать, что происходит во время компиляции, что вызывает ошибку во время компиляции.
Я хочу получить ответ с точки зрения интервью. Как ведут себя Vtable и Vptr в этом сценарии. Я знаю, что будет один vptr для базового класса, который будет унаследован от класса Derived1. Что проверяет компилятор во время компиляции?