关注
当你有一个指向B对象的A类型指针,并且使用这个指针调用一个虚方法时,C++通过动态绑定来决定应该调用哪个方法实现。这里是这个过程的详细说明:
1. 调用虚方法:
• 当A的指针调用一个虚方法时,编译器会检查这个指针的实际类型(在运行时)是B。
• 然后,它会查看B的虚函数表(vtable),这个表在编译时为每个包含虚函数的类创建,并在运行时用具体的函数地址填充。
• 指针会通过B的vtable找到正确的函数实现(即使是通过A类型的指针调用)并执行。这就是多态行为的基础。
2. 调用非虚方法:
• 如果A的指针调用的是一个非虚方法,那么这个调用就是静态绑定的。这意味着调用的实现是在编译时决定的,而不是运行时。
• 对于非虚方法,即使A的指针实际上指向一个B类型的对象,它也会调用在A中定义的那个方法实现。在这种情况下,不存在动态多态性,因为方法的调用不会检查对象的实际派生类类型。
所以,总结起来:
• 对于虚方法,C++使用动态绑定:即便是通过基类指针调用,也会根据对象的实际类型来确定应该执行哪个类中的方法。
• 对于非虚方法,C++使用静态绑定:方法调用解析基于指针的声明类型,而不是它实际指向的对象的类型,因此总是调用基类中定义的方法。
查看原帖
5 评论
相关推荐

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 写给毕业5年后的自己 #
4142次浏览 95人参与
# 毕业季等于分手季吗 #
14220次浏览 165人参与
# 华泰证券Fintech星战营 #
168303次浏览 191人参与
# 职场捅娄子大赛 #
319026次浏览 3261人参与
# 好好告别我的学生时代 #
42916次浏览 831人参与
# 华为求职进展汇总 #
4644861次浏览 28246人参与
# 海信求职进展汇总 #
64996次浏览 359人参与
# 机械制造岗投递时间线 #
22254次浏览 341人参与
# 晒一下我的毕业照 #
32511次浏览 355人参与
# 如何缓解求职过程中的焦虑? #
7434次浏览 96人参与
# 如果今天是你的last day,你会怎么度过? #
22700次浏览 197人参与
# HR问:你期望的薪资是多少?如何回答 #
40064次浏览 525人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
108268次浏览 782人参与
# 晒晒我司的端午福利 #
14855次浏览 99人参与
# 记录实习开销 #
26373次浏览 193人参与
# 如果重来一次,你还会学计算机吗 #
46869次浏览 417人参与
# 我想象的实习vs现实的实习 #
280309次浏览 2214人参与
# 上班苦还是上学苦呢? #
222819次浏览 1329人参与
# 工作两年想退休了 #
119910次浏览 1120人参与
# 视觉/交互/设计百问百答 #
43208次浏览 427人参与
# 实习生如何通过转正 #
84972次浏览 1326人参与