[ 转载 ] overload, override, overwrite, rewrite —— 关于 C++ 几个术语的简析

由于阅读 C++ 英文的缘故,对一些术语的用词比较在意。

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 的中文就是重写或者润色。这里的重写是处于某种原因重新写过,原来写仍然有效。

文章来源:Universe : : dust

切莫人云亦云

C++ Primer Plus》,并不如推荐的那么好。而且翻译水平实在让人泪流满面,不得不与第六版英文原版对照阅读。

之所以用此书作为学习 C++ 的入门书,是因为在网上看到众人推荐。当我认真仔细地阅读完这本书后,怀疑推荐此书的人是否都是人云亦云。该书从 C 的角度去学习 C++,而不是从 C++ 的角度,因此第五版与第六版都不适合 2012 年学习 C++ 初学者。

强烈推荐《C++ How to Program》,该书知识逻辑编排合理,语句通顺简明扼要,例题难度适中,讲解和注释都很详细,非常适合没有编程语言基础的初学者。

如果有其它编程语言基础的初学者可以直接看《C++ Primer》或者《The C++ Programming Language》。

从三个方面说明此书的问题:
一、知识体系编排

  1. 书籍总体编排,逻辑松散,没什么体系,学后感觉知识点像一盘散沙,错误不少。
  2. 学完这本书后,很难形成知识体系树,很难记住书中的各种散乱的知识点。虽说本书中每章末都有总结,但基本是按照章节里基本知识点原来的顺序逐个复述出来。
  3. 书中的程序例题难度跨度不均衡,复杂的例题讲解不清(可参看第 12 章有关 ATM 的队列模拟例题)。
  4. 作为一本入门级的教科书,之前讲过的知识,本应融入往后的例题或文字中,使之经常出现,让初学者渐渐熟悉,但本书经常介绍完一个知识点在之后的章节中却只字不提。难道是考验人过目不忘的本事。例如,提到 C++ 的类型转换后,却没有再使用过 C++ 的类型转换,而是使用 C 语言的类型转换。
  5. 用 C++ 编程的思想体现不出来,随处可见 C 语言的影子。

二、新标准并未融入书中

  1. 此书的第六版,英文原版,添加 C++11 标准的内容,但 C++11 的内容并没有融入书中,只是简单介绍新标准的知识点,完全强硬塞入。第六版仅比第五版多一章,在第十八章加入 C++11 内容。
  2. 第五版与第六版的程序例题基本一样,可以说没有改动。第五版是 2004 年 11 月 25 日出版,第六版 2011 年 10 月 28 日出版,跨度七年,却没有重新编排,完全是圈钱行为。(也正是第五版与第六版几乎没有改动,才可以对照着英文原版第六版阅读。)

三、错误不少

  1. 不知道这本书是否有人校对过?! 所谓的印刷错误、笔误太多。第五版的错误,到第六版还在,实在强大。
  2. 勘误表基本没有用,此书一千多页(英文原版),勘误表上只有前四百七十八页的勘误,而且勘误表上错误和改正内容完全一样。