关注
当你有一个指向B对象的A类型指针,并且使用这个指针调用一个虚方法时,C++通过动态绑定来决定应该调用哪个方法实现。这里是这个过程的详细说明:
1. 调用虚方法:
• 当A的指针调用一个虚方法时,编译器会检查这个指针的实际类型(在运行时)是B。
• 然后,它会查看B的虚函数表(vtable),这个表在编译时为每个包含虚函数的类创建,并在运行时用具体的函数地址填充。
• 指针会通过B的vtable找到正确的函数实现(即使是通过A类型的指针调用)并执行。这就是多态行为的基础。
2. 调用非虚方法:
• 如果A的指针调用的是一个非虚方法,那么这个调用就是静态绑定的。这意味着调用的实现是在编译时决定的,而不是运行时。
• 对于非虚方法,即使A的指针实际上指向一个B类型的对象,它也会调用在A中定义的那个方法实现。在这种情况下,不存在动态多态性,因为方法的调用不会检查对象的实际派生类类型。
所以,总结起来:
• 对于虚方法,C++使用动态绑定:即便是通过基类指针调用,也会根据对象的实际类型来确定应该执行哪个类中的方法。
• 对于非虚方法,C++使用静态绑定:方法调用解析基于指针的声明类型,而不是它实际指向的对象的类型,因此总是调用基类中定义的方法。
查看原帖
5 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
5592次浏览 75人参与
# 机械人避雷的岗位/公司 #
41148次浏览 268人参与
# 程序员找工作至少要刷多少题? #
10425次浏览 167人参与
# 牛客AI体验站 #
3723次浏览 107人参与
# 论秋招对个人心气的改变 #
6346次浏览 107人参与
# 为了减少AI幻觉,你注入过哪些设定? #
2061次浏览 77人参与
# 刚入职的你踩过哪些坑 #
4577次浏览 97人参与
# AI Coding的使用心得 #
2722次浏览 71人参与
# 我现在比当时_,你想录用我吗 #
4176次浏览 71人参与
# 一张图晒一下你的AI员工 #
3199次浏览 72人参与
# 关于春招/暑期实习,你想知道哪些信息? #
4575次浏览 86人参与
# 程序员能干到多少岁? #
6070次浏览 92人参与
# 找工作的破防时刻 #
252395次浏览 1959人参与
# 晒晒你司的新年福利 #
4409次浏览 72人参与
# 大家实习每天都在干啥 #
119084次浏览 627人参与
# 我的工作日记 #
172760次浏览 1680人参与
# 实习,不懂就问 #
165862次浏览 1477人参与
# 软开人,秋招你打算投哪些公司呢 #
180897次浏览 1398人参与
# 黄金这个事上,你学到了什么 #
983次浏览 29人参与
# 12306一秒售罄,你抢到回家的票了吗? #
680次浏览 21人参与
查看11道真题和解析
