趣談 C++ 中反人類的翻譯


趣談 C++ 中反人類的翻譯

作者 | 朱並作

出品 | CSDN(ID:CSDNnews)

說起C++,我想在大多數程序員心裡的第一印象是非常複雜的,C++的學習曲線是非常陡峭的。

趣談 C++ 中反人類的翻譯

我自己在學習C++的過程中也花費了很多的時間。個人認為造成C++陡峭的學習曲線的原因之一就是國內對C++的功能特性翻譯的反人類。

這些反人類的翻譯嚴重挑戰了我對生活常識的理解。而我個人總是喜歡把複雜的概念都轉換成方便理解的生活常識。

下面的一些概念是我自己在學習C++中碰到的一些難以理解的概念,這些概念其實也不復雜,個人拙見是名詞翻譯的不準確造成的。

我們來一起看下這些讓C++難以理解的反人類翻譯.

趣談 C++ 中反人類的翻譯

反人類翻譯之一:構造函數

應該改名為:初值函數。構造函數的最主要的作用無非是給成員變量賦初值。當然也可以在裡面加一條cout輸出。但主要的功能就是賦初值。其實你可以把這個過程想象成一群小朋友進入一個大的教師要準備開始做手工了,要正式開始做手工前,總得告訴這群小朋友每個人一個最初的座位號吧。給初值就是構造函數的主要工作了。

1 class Time
2 {
3 public:
4 Time(int n):num(n){}
5 private:
6 int num;
7 };


趣談 C++ 中反人類的翻譯

析構函數改為清掃函數

這一大群小朋友做完收工後,教室裡髒兮兮,亂糟糟的。不能就這麼久走了吧。總得把教室打掃乾淨再走才行。析構函數就是用來做“清理善後” 的工作(例如在建立對象時用new開闢了一片內存空間,delete會自動調用析構函數後釋放內存)。

C++當中的析構函數格式如下:

class Time
{
public:
~Time{}
};

另外關於析構函數的執行順序可以這麼理解。這個教室是長方形的,每排只能坐一個人。進來這個教室的時候得讓坐最裡面的小朋友先進,打掃衛生的時候,得最後進來的小朋友先打掃,然後後面的跟著一個個打掃。

這樣看來,所有小朋友進來坐位置的順序是:E->D->C->B->A。

而打掃衛生的順序就是:A→B→C→D→E

趣談 C++ 中反人類的翻譯


趣談 C++ 中反人類的翻譯

函數重載和運算符重載也需要改

重載這個詞真不知哪位大仙創造出來的,記得當初學C++的時候被這麼逆天的詞嚇了一大跳。感覺又是一塊難啃的骨頭來了。函數的重載應該改為函數的同名異類。打個比方ABCDE這5個小朋友,真名都叫“小明”,但A小明,擅長打球,以後班上有打球的活就找A小明瞭。B小明擅長畫畫,以後班上有畫畫的事就找B小明瞭。C小明擅長彈琴,以後班上彈琴的事就找C小明瞭。運算符重載就該改成運算符的同名異類。同一個名字的運算符完成了幾種工作。

函數重載舉列:

int Max (int,int);//返回兩個整數的最大值;
int Max (const vector &);//返回vector容器中的最大值;
int Max (const matrix &);//返回matrix引用的最大值;

運算符重載舉列:

Box operator+(const Box&);
Box operator+(const Box&, const Box&);


趣談 C++ 中反人類的翻譯

友元函數改為好友函數

ABCDE這個5個小朋友,每個人都有自己的好朋友,而且只有好朋友之間才會把自己的好吃的零食分享給對方。打個比方,A的好朋友是C。那麼C就可以吃到A的零食。友元函數就是幹這個的。比如把A函數聲明成自己的好友函數後,這個A函數就可以訪問自己的私有數據成員了。

class Box
{
double width;
public:
double length;
friend voidprintWidth( Box box ); //友元函數//
voidsetWidth( double wid );
};


趣談 C++ 中反人類的翻譯

派生類改為兒子類,派生改為‘生’,基類改名為父類

一個兒子類是從一個父類一個繼承了財產叫做單繼承。一個兒子類從兩個或多個父類繼承了財產叫做多重繼承,因為這個兒子類的老媽可能改嫁了好幾次,而他的每個父親都願把財產繼承給這個兒子。所以他就繼承了多個父親的財產了。虛基類改名為摳門父類,因為他把財產繼承給兒子時會和他摳門父親一起開會商量,保證他們這些摳門父親給這個兒子的東西不會重複。這個摳門父親給了一個電視機,另外一個摳門父親就不會給了,得自己留著用。

class N:
{public:
Int x;
Void display{cout<};
Clas A:public N
{ public :
Float y;
}


趣談 C++ 中反人類的翻譯

動態關聯與靜態關聯

靜態關聯改名結婚綁定,雙方因為結了婚,沒生之前就能確定將來的小孩是誰的了。

動態關聯改名產後綁定,雙方還沒結婚,未婚先子,某一方作風可能存疑,必須生產後看看像誰,驗下DNA才知道這個小孩就是誰的。

我們先看下靜態關聯的定義:函數重載和通過對象名調用的虛函數,在編譯時即可確定其調用的虛函數屬於哪一個類,其過程稱為靜態關聯,由於是在運行前關聯的,所以又叫早期關聯。

簡單理解為:在編譯時就可以確定虛函數的爸爸是誰,這個過程叫做結婚綁定,

我們再看下動態關聯的定義:在運行時,基類指針變量指向了某個類對象,然後通過這個基類指針去調用虛函數。由於是在運行時把虛函數與對象“綁定”在一起, 因此,此過程稱為動態關聯。由於動態關聯是在編譯後運行階段進行的,所以又稱為滯後關聯。

簡單理解為:在運行後才知道自己爸爸是誰,這個過程叫產後綁定。

要是改成這樣的話,就理解起來比較深刻了,不會過一段時間後就分不清動態和靜態哪個是之前確定,哪個是之後確定了。

聲明:本文系作者獨立觀點,不代表CSDN立場。

【END】



分享到:


相關文章: