关注
当你有一个指向B对象的A类型指针,并且使用这个指针调用一个虚方法时,C++通过动态绑定来决定应该调用哪个方法实现。这里是这个过程的详细说明:
1. 调用虚方法:
• 当A的指针调用一个虚方法时,编译器会检查这个指针的实际类型(在运行时)是B。
• 然后,它会查看B的虚函数表(vtable),这个表在编译时为每个包含虚函数的类创建,并在运行时用具体的函数地址填充。
• 指针会通过B的vtable找到正确的函数实现(即使是通过A类型的指针调用)并执行。这就是多态行为的基础。
2. 调用非虚方法:
• 如果A的指针调用的是一个非虚方法,那么这个调用就是静态绑定的。这意味着调用的实现是在编译时决定的,而不是运行时。
• 对于非虚方法,即使A的指针实际上指向一个B类型的对象,它也会调用在A中定义的那个方法实现。在这种情况下,不存在动态多态性,因为方法的调用不会检查对象的实际派生类类型。
所以,总结起来:
• 对于虚方法,C++使用动态绑定:即便是通过基类指针调用,也会根据对象的实际类型来确定应该执行哪个类中的方法。
• 对于非虚方法,C++使用静态绑定:方法调用解析基于指针的声明类型,而不是它实际指向的对象的类型,因此总是调用基类中定义的方法。
查看原帖
5 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 什么是优秀的实习经历 #
8657次浏览 214人参与
# 实习简历求拷打 #
13443次浏览 163人参与
# 被上班搭子“传染”了哪些习惯 #
5721次浏览 99人参与
# 秋招被挂春招仍然能投的公司 #
7000次浏览 100人参与
# 工作后,你落下了哪些病根 #
13791次浏览 191人参与
# 外包能不能当跳板? #
54126次浏览 256人参与
# mt对你说过最有启发的一句话 #
36914次浏览 442人参与
# 作业帮求职进展汇总 #
83350次浏览 547人参与
# 摸鱼被leader发现了怎么办 #
101992次浏览 647人参与
# 秋招特别不鸣谢 #
15981次浏览 181人参与
# 考研失败就一定是坏事吗? #
201429次浏览 1376人参与
# 选实习,你更看重哪方面? #
14406次浏览 220人参与
# 投格力的你,拿到offer了吗? #
152866次浏览 817人参与
# 一起聊美团 #
307137次浏览 1760人参与
# 京东美团大战,你怎么看? #
158157次浏览 861人参与
# 安克创新求职进展汇总 #
62390次浏览 541人参与
# 京东开奖 #
631616次浏览 3177人参与
# 第一次面试 #
1036589次浏览 13683人参与
# 今年秋招你收到了多少封邮件? #
18101次浏览 220人参与
# 毕业论文进行时 #
20933次浏览 132人参与
