C++虛函數部分

這個是在最近調一個bug的時候,出現的,注意不是同一個類中的多態是不能使用的,如果在兩個程序中,如一個DLL,一個exe中,兩個即使類名一樣,類的相關屬性也一樣,但是也不能交互使用。

#include <iostream>
using namespace std;

class A{
public:
	virtual void fun2() = 0;
	virtual void fun() = 0;
};

class B{
public:
	virtual void fun(){};
	virtual void fun2(){};
};

class C:public A
{
public:
	void fun(){
		cout << "C" << endl;
	}
	void fun2(){
		cout << "C-fun2" << endl;
	}
};


typedef void(*Fun)(void);  //函數指針

int main()
{
	B* p = (B*)new C();
	// (Fun)*((int *)*(int *)p);
	// Fun f = (Fun)(*(int *)*(int*)p);
	Fun f =(Fun)(*(((int *)*(int*)p) + 1));

	// * (((int *)*(int*)p)+1) 然後再取一個字節的內容
	// (int *) *(int*)p 它的指向的內容也是一個整型數組,所以把指針轉爲數組指針
	// *(int*)p 取虛函數表的指針指向的內容
	// (int*)p  因爲虛函數表的指針在一個類的頭部,它是一個四字節的指針
	f();
	//p->fun();
	//p->fun2();

	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章