C++中overload,override,overwrite的区别详细解析

本文详细介绍了C++中函数重载(Overload)的概念及其特点,包括在同一作用域内使用相同名称但参数列表不同的多个函数。同时,还解释了函数覆盖(Override)的概念,即派生类函数如何覆盖基类函数,以及覆盖所需的条件。

Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。

Override(覆盖):是指派生类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。

Overwrite(重写):是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

### Java中的OverrideOverwriteOverload #### Override方法 在面向对象编程中,`override`是指子类重新定义父类的方法。这允许子类提供特定实现来替代继承自父类的行为。为了成功覆盖一个方法,在子类中声明的方法签名(包括名称、参数列表以及返回类型)应当与父类中的被重写方法相匹配。 ```java class Animal { public void makeSound() { System.out.println("Some sound"); } } class Dog extends Animal { @Override public void makeSound() { System.out.println("Bark bark!"); } } ``` 上述例子展示了如何通过使用`@Override`注解来指示编译器该方法意在覆盖超类中的同名方法[^1]。 #### Overload方法 不同于`override`,`overload`发生在同一个类内部,当多个具有相同名字但是不同参数列表的方法存在时即发生过载。这意味着这些方法可以有不同的数量或类型的输入参数,甚至它们的顺序也可以不一样;然而,返回值类型并不影响是否构成重载的一部分条件之一。 ```java public class Calculator { int add(int a, int b){ return a+b; } double add(double a,double b){ return a+b; } float add(float a,float b,int c){ return a+b+c; } } ``` 此代码片段说明了一个名为`add()`函数的不同版本是如何在同一类内共存并根据调用时传递给它的实参自动选择最合适的那个版本执行[^2]。 #### 关于Overwrite概念 值得注意的是,“overwrite”并不是Java官方术语,通常指的是文件操作里的一种行为——新数据会替换旧有位置上的内容而不增加额外存储空间。但在讨论OOP特性时不常用到这个词。如果提到它,则可能指代错误地隐藏了基类成员变量或方法而不是正式意义上的多态机制下的合法覆写过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值