指向虚函数的指针仍然会被虚拟调用吗?
指向声明为 virtual 的类成员函数的函数指针有效吗?
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
会被调用吗?
Will a function pointer to a class member function which is declared virtual be valid?
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);
Will B::function
be called?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
是的。在 codepad 或
Yes. Valid code to test on codepad or ideone :
是的。它也适用于虚拟继承。
Yes. It also works with virtual inheritance.
当您尝试调用继承的函数时,该函数将被调用。
The function will be called, as you just try to invoke inherited function.
对此最好的测试是使 A 类中的方法成为纯虚方法。在这两种情况下(有或没有纯虚方法),B::function 都会被调用。
The best test for that thing is to make the methods in the class A a pure virtual method. In both cases (with or without pure virtual methods), B::function will be called.