指向虚拟的类成员函数的函数指针是否有效?
class A {
public:
virtual void function(int param){ ... };
}
class B : public A {
virtual void function(int param){ ... };
}
//impl :
B b;
A* a = (A*)&b;
typedef void (A::*FP)(int param);
FP funcPtr = &A::function;
(a->*(funcPtr))(1234);
是否会调用B::function
?
答案 0 :(得分:5)
class A {
public:
virtual void function(int param){
printf("A:function\n");
};
};
class B : public A {
public:
virtual void function(int param){
printf("B:function\n");
};
};
typedef void (A::*FP)(int param);
int main(void)
{
//impl :
B b;
A* a = (A*)&b;
FP funcPtr = &A::function;
(a->*(funcPtr))(1234);
}
答案 1 :(得分:2)
是。它也适用于虚拟继承。
答案 2 :(得分:0)
将调用该函数,因为您只是尝试调用继承的函数。
答案 3 :(得分:0)
对该事物的最佳测试是使A类中的方法成为纯虚方法。在这两种情况下(使用或不使用纯虚方法),将调用B :: function。