关于 C++ 几个术语的简析--overload, override, overwrite, rewrite

本文详细解析了C++中overload, override, overwrite和rewrite四个术语的区别,通过实例帮助理解各自含义。overload用于方法重载,override表示子类覆盖父类方法,overwrite特指擦写原有值,而rewrite则强调重写内容而非替换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

overload, override, overwrite, rewrite 这几个单词经常出现在 C++ 书中,翻阅一些译版后发现并未对 override, overwrite, rewrite 严格区分,大都翻译成重写。其实查阅英文原版会发现,不同的上下文用不同的单词描述。以下逐个分析:

• overload 重载

对于这个翻译,暂时没有异议,也许正是由于 overload 翻译成重载,导致把 override 直接翻译成重写。

• override 覆盖

很多译版翻译成重写。本人觉得这样翻译有歧义,到底是完全重新写还是保留原来方法再写一个新的?无法从字面了解其意思。如果翻译成覆盖或覆写,并解释 override 只是对原方法的另外实现,原方法并未放弃,就不会和 overwrite 混淆。例如,假设 one.cpp 和 two.cpp 两文件在一个完整的程序中同时编译,其各自的程序片段如下:

// one.cpp
#include <iostream>
int dick = 10; // external variable definition 外部变量定义
...

//two.cpp
#include <iostream>
static int dick = 20; // override external dick 覆盖外部变量 dick
...

two.cpp 中的 dick 覆盖了原来 one.cpp 中的 dick。但是原来的 dick 仍然存在,只不过 dick 在 two.cpp 中被重新定义了。

• overwrite 擦写

网上把 overwrite 和 override 划等号的人比比皆是,认为都是重写的意思。其实 overwrite 才是真正意义上的重写。若翻译成擦写,更一目了然,擦掉原来的值,在原处重新写。例如:

int x = 8;
x = 9; // overwrite x with 9 (把 x 擦写为 9)

这里 x 的原值 8 已经被擦写为 9。原值 8 被 9 代替。

• rewrite 重写

该单词经常出现在编程练习中,题目要求重写某例题或某例子。例如:“ Rewrite this code without using break or continue . ” 或 “ Rewrite the following fragment using switch : ”

英英字典对 rewrite 的英文解释为:in order to improve it or change it. 为了提高或改变之。比较接近 rewrite 的中文就是重写或者润色。这里的重写是处于某种原因重新写过,原来写仍然有效。

### 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、付费专栏及课程。

余额充值