#include<iostream>
using namespace std;
class base
{
public:
virtual void add() {
cout << "hi";
}
};
class derived : public base
{
private:
void add() {
cout << "bye";
}
};
int main()
{
base *ptr;
ptr = new derived;
ptr->add();
return 0;
}
Non ho un problema con come questo è implementato. Capisco che tu usi vtables e che il vtable di derivato contenga l'indirizzo della nuova funzione add(). Ma add() è privato non dovrebbe generare un errore nel compilatore quando provo ad accedervi al di fuori della classe? In qualche modo non sembra giusto.
Gli identificatori di override e accesso sono concetti ortogonali. – sbi
i vtables sono un dettaglio di implementazione. –