Eventuali duplicati:
Why is it allowed to call derived class' private virtual method via pointer of base class?perché posso accedere al metodo privato dall'esterno in C++?
Recentemente, ho incontrato una strana domanda, plz fare riferimento al seguente codice:
#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();
}
e l'uscita è:
A disp
B disp
Mi chiedo perché il puntatore b può accedere a disp()? È privato! Non è vero?
Non è per la classe che si sta accedendo tramite – fork0
'A :: disp' è pubblico; questo è l'unico "disp" a cui accede l'accesso principale. –