C ++でクラス外のプライベート仮想関数を呼び出す方法

クラス外の仮想関数ポインタを使用して、プライベートの制限をスキップします。

#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;
}

上記のコードは、仮想関数の呼び出しがクラスの通常のメンバー関数のようにこのポインターで渡される必要がないことを個人的に推測しています(このビューは必ずしも正しいとは限りません)。

公開された123元の記事 ウォン称賛31 ビュー90000 +

おすすめ

転載: blog.csdn.net/qq_40794602/article/details/103914942