You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++继承中Overloading(重载)与Overriding(重写)判定问题

重写、重载与名字隐藏的概念辨析

首先先纠正你原有认知里的两处偏差:

  • 重载(Overloading)的判定规则不包含返回值类型:只有在同一作用域下,函数名相同、参数列表(参数数量、类型、排列顺序)不同的同名函数才算重载。仅返回值不同的同名函数在C++、Java等主流面向对象语言中属于语法错误,也不属于合法重载。
  • 重写(Overriding)仅发生在继承体系中,核心要求是派生类函数与基类的虚函数签名完全一致:参数列表必须完全相同,返回值仅允许为协变类型(比如基类返回基类指针,派生类返回派生类指针)才可存在差异,重写的核心作用是实现运行时多态。

你提到的幻灯片示例中,基类fa1()无参、返回值为void,派生类fa1(float)带float类型参数、返回值为float,这种情况既不属于重写,也不属于常规重载,符合C++等语言中「名字隐藏(Name Hiding)」的定义:
基类和派生类属于不同作用域,派生类中定义的同名函数fa1,会将基类中所有名为fa1的函数全部隐藏,派生类对象调用fa1时只会匹配派生类的版本,无法直接调用基类的无参fa1。如果要实现派生类对基类fa1的重载,需要在派生类中显式添加using 基类名::fa1;声明,将基类的fa1名称引入派生类作用域。

如果该幻灯片将该情况标注为Overriding,仅可能是内容错误,或者采用了非通用的、不严谨的自定义定义(将派生类出现同名函数统称为重写),这一表述不符合工业界通用的面向对象编程概念规范。

内容的提问来源于stack exchange,提问作者Ethan Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:45:01