#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;
}
Output is bye
I dont have a problem with how this is implemented. I understand you use vtables and the vtable of derived contains the address of the new add() function. But add() is private shouldn't compiler generate an error when I try to access it outside the class? Somehow it doesn't seem right.
 
     
     
    