クラス外の仮想関数ポインタを使用して、プライベートの制限をスキップします。
#include<iostream>
using namespace std;
class B
{
private:
virtual void func()
{
cout << "func" << endl;
}
};
int main()
{
B b;
long *p1 = (long *)&b;
long *p2 = (long *)(*p1);
typedef void(*Func)(void);
Func func = (Func)p2[0];
func();
return 0;
}
上記のコードは、仮想関数の呼び出しがクラスの通常のメンバー関数のようにこのポインターで渡される必要がないことを個人的に推測しています(このビューは必ずしも正しいとは限りません)。