Abgeleitete Klasse Private Methode wird aufgerufen

Ich habe einen Basisklassenzeiger, der auf das abgeleitete Klassenobjekt zeigt. Die Methode foo () ist in der Basisklasse öffentlich, in der abgeleiteten Klasse jedoch privat. Die Basisklasse foo () ist virtuell. Wenn ich also foo () vom Basisklassenzeiger aus aufrufe, hat Vptr Table die Adresse der abgeleiteten Klasse foo (), ABER seine private in der abgeleiteten Klasse ... wie wird sie also aufgerufen?

Ich verstehe Laufzeit-Polymorphismus und ich verstehe auch, dass die Access-Spezifizierer für die Kompilierungszeit arbeiten und das virtuelle Konzept zur Laufzeit funktioniert. Es darf also kein Compilerfehler geben.

Meine Frage ist: Ist dies eine Lücke, durch die wir private Methoden der abgeleiteten Klasse aufrufen können? oder Es wird erwartet, dass es sich so verhält. Jede gute Erklärung für dieses Verhalten.

Vielen Dank im Voraus.

CODE:

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;
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage