C++ 重载、重写、隐藏
重载 overload
定义:函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。调用时,编译器能够判断在哪种情况下调用哪种方法。
阶段:编译时。
目的:把函数本身作为一个概念抽象出来,基于不同形参给出不同实现以实现多态,实现静多态的一种技术。
重写/覆盖 override
定义:子类重写从基类继承过来的函数,函数名、返回值、参数列表都必须和基类相同。
一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数。
阶段:运行时。编译器判断可以优化时,会提前到编译时,以提高性能。
目的:实现运行时多态机制。
关键字override。确保派生类函数被改写,且符合规则,防止意外重写。
关键字final。应用于虚函数,阻止它在派生类中被改写。应用于类,该类不能被继承。
隐藏hide、重定义redefining
隐藏和重定义是一个意思。
定义:派生类会隐藏基类的同名函数,无论返回值和参数列表是否相同。
阶段:编译时
目的:为了避免“非恶意性的错误”,向前兼容。避免派生类新增的接口对基类的影响。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!