У меня есть указатель базового класса, указывающий на объект производного класса. Метод foo () является общедоступным в базовом классе, но частным в производном классе. Базовый класс foo () виртуальный. Итак, когда я вызываю foo () из указателя базового класса, таблица Vptr имеет адрес производного класса foo (), НО его частный в производном классе ... так как он вызывается. ??
Я понимаю полиморфизм времени выполнения, а также понимаю, что спецификаторы доступа работают во время компиляции, а концепция Virtual работает во время выполнения. Таким образом, ошибки компилятора не должно быть.
Мой вопрос: это лазейка, через которую мы можем вызывать частные методы класса Derived? или Ожидается, что он будет вести себя таким образом. Любое хорошее объяснение такого поведения.
Заранее большое спасибо.
КОД:
class A
{
public:
virtual void foo()
{
std::cout << "In A";
}
};
class B:public A
{
private:
void foo()
{
std::cout << "In B ??? Its Private Method :-( ";
}
};
int main()
{
A* ptr = new B();
ptr->foo();
return 0;
}