#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;
}
出力はbye
これがどのように実装されているかについては問題ありません。vtablesを使用していて、派生のvtableに新しいadd()関数のアドレスが含まれていることを理解しました。しかし、add()はプライベートですが、クラス外でアクセスしようとすると、コンパイラーはエラーを生成しませんか?どういうわけかそれは正しくないようです。