首页 / 腾讯视频
#
腾讯视频
#14935次浏览 342人互动
此刻你想和大家分享什么
腾讯视频暑期客户端一面(60min)
ZackZhang:当你有一个指向B对象的A类型指针,并且使用这个指针调用一个虚方法时,C++通过动态绑定来决定应该调用哪个方法实现。这里是这个过程的详细说明:
1. 调用虚方法:
• 当A的指针调用一个虚方法时,编译器会检查这个指针的实际类型(在运行时)是B。
• 然后,它会查看B的虚函数表(vtable),这个表在编译时为每个包含虚函数的类创建,并在运行时用具体的函数地址填充。
• 指针会通过B的vtable找到正确的函数实现(即使是通过A类型的指针调用)并执行。这就是多态行为的基础。
2. 调用非虚方法:
• 如果A的指针调用的是一个非虚方法,那么这个调用就是静态绑定的。这意味着调用的实现是在编译时决定的,而不是运行时。
• 对于非虚方法,即使A的指针实际上指向一个B类型的对象,它也会调用在A中定义的那个方法实现。在这种情况下,不存在动态多态性,因为方法的调用不会检查对象的实际派生类类型。
所以,总结起来:
• 对于虚方法,C++使用动态绑定:即便是通过基类指针调用,也会根据对象的实际类型来确定应该执行哪个类中的方法。
• 对于非虚方法,C++使用静态绑定:方法调用解析基于指针的声明类型,而不是它实际指向的对象的类型,因此总是调用基类中定义的方法。
点赞 评论 收藏
分享
腾讯视频PC客户端二面
m123277:后续,进HR面了,看来是压力面试
点赞 评论 收藏
分享
2023-09-17 23:10
清华大学 推荐算法 点赞 评论 收藏
分享
03-20 18:03
中国海洋大学 Java 点赞 评论 收藏
分享
04-30 22:29
字节跳动_飞书_后端开发(实习员工) 点赞 评论 收藏
分享
2022-11-03 21:31
长春工业大学 运营 点赞 评论 收藏
分享
玩命加载中