這個是在最近調一個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;
}