Duplicar posible:
Why is it allowed to call derived class' private virtual method via pointer of base class?¿por qué puedo acceder al método privado desde afuera en C++?
Recientemente, me encontré con una pregunta extraña, PLZ consulte siguiente código:
#include <iostream>
using namespace std;
class A
{
public:
virtual void disp() {
cout<<"A disp"<<endl;
}
};
class B : public A
{
private:
void disp() {
cout<<"B disp"<<endl;
}
};
int main()
{
A a;
a.disp();
A *b = new B();
b->disp();
}
y la salida es:
A disp
B disp
Me pregunto por qué el puntero b puede acceder a disp()? ¡Es privado! ¿No es así?
No es para la clase a la que está accediendo a través de – fork0
'A :: disp' es público; ese es el único 'disp' al que está accediendo el principal. –