Производный класс Вызывается закрытый метод

У меня есть указатель базового класса, указывающий на объект производного класса. Метод foo () является общедоступным в базовом классе, но закрытым в производном классе. Базовый класс foo () является виртуальным. Поэтому, когда я вызываю foo () из указателя базового класса, Vptr Table имеет адрес производного класса foo (), НО его private в классе Derived ... так как он вызывается. ??

Я понимаю полиморфизм во время выполнения, а также понимаю, что спецификаторы Access работают во время компиляции, а концепция 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;
}

Ответы на вопрос(2)

Ваш ответ на вопрос