#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;
}
Я не имею проблему с тем, как это реализуется. Я понимаю, что вы используете vtables, а vtable производного содержит адрес новой функции add(). Но add() является частным, если компилятор не генерирует ошибку при попытке получить к ней доступ за пределами класса? Почему-то это не кажется правильным.
Спецификаторы переопределения и доступа - это ортогональные концепции. – sbi
vtables - это деталь реализации. –