|
所以直接就用C的地址(此时是*B的首地址)
+偏移量来寻找DISPLAY
我的理解不是这样。
--------------------------------------------------
函数是靠地址调用的。
成员函数的地址是什么规则我也不太清楚。但是似乎与普通地址不同。
程序代码:
class A
{
public:
void display(){cout<<"A"<<endl;}
};
class B:public A
{
public:
void display(){cout<<"B"<<endl;}
};
class C:public A
{
int i;
public:
void display(){i=10;cout<<"C"<<endl;}
void show()
{
cout<<"Show:"<<i<<endl;
}
};
typedef void (B::*b_Func)();
void f(){}
typedef void (*FC)();
int main(int argc, char* argv[])
{
B b1,b2,b3,b4;
B b_ARR[4]={b1,b2,b3,b4};
b_Func b_FCArr[4]={b1.display,b2.display,b3.display,b4.display};
for(int i=0;i<4;i++)
{
cout<<b_FCArr[i]<<endl;
}
FC pFc=f;
cout<<pFc<<endl;
return 0;
}
结果输出的b_FCArr[i]都是1,而pFc却是一个地址值。
所以我认为,应该不会是一个偏移。 |
|