C++ 有没有可能通过父类指针调用子类的虚函数

 我来答
西湖钓秋水ae43426
2016-11-24 · TA获得超过1.3万个赞
知道大有可为答主
回答量:3024
采纳率:94%
帮助的人:372万
展开全部
1. 虚函数表中应该是有fun_t的吧?

2. 有没有什么奇技淫巧绕过编译器的检测,通过父类指针来调用fun_t()呢?
直接转化为子类对象即可:
Son* son = dynamic_cast<Son*>(father);
son->fun_t();
如果father不是一个son的实例,上述代码会抛出std::bad_cast异常。
3. 我们是可以拿到fun()的地址的,那么是否可以通过计算偏移量来拿到fun_t()呢?
你需要知道vtable表中存放fun那个地址项的地址,才可以做推算。但是由于vtable表项中的顺序是编译器决定的,所以这个推算没有什么统一的正确的方法。
实际上,在2中你已经可以调用到fun_t()了,没有必要自己再造一个没有兼容性的轮子。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式