「學」的部分:
一個沒有基礎的人,要完整地學會C++語言,可能需要一年往上的時間,而且還不一定能學明白。我以為,這個問題出在教材上,寫得太過於晦澀難懂了,而且把很多特別不常用的內容添加了進去,這會導致很多想學的人越看越迷糊。在我看來,C++語言的基礎內容不是很多,我們只抓重點,用一整天的時間絕對可以學會。
前幾節課說過,計算機是一個計算二進位0和1加法的超級機器,我們看到的所有應用軟體,在電腦內部都是一堆0和1的數字而已。這些0和1不是胡亂堆砌的,而是按照特殊的規律組合在一起的,這種規律就是所謂的機器語言。
如你所想,機器語言也是一種程式語言,只不過放眼望去,機器語言的代碼全部是0和1的組合,不是特別專業的人,絕對看不懂寫了什麼。不過,機器語言的好處是計算機能直接讀懂。但是,機器語言實在是太過於難懂了,還容易看得眼花,所以,沒過多久,一幫會機器語言的程式設計師一起開發了用字母和數字代替二進位的程式語言,這個語言就是大名鼎鼎的彙編語言。
彙編語言只不過是簡單翻譯了一下二進位中的內容。
比方說,10101010這個二進位代表的是一個控制命令,它能把CPU中某個地方的某個數據轉移到另一個地方;而彙編語言,就用MOV這個單詞代表了這個二進位的命令。
也就是說,彙編語言相當於是翻譯語言,它的編程過程和機器語言的編程過程是一模一樣的。可是,電腦看不懂彙編語言,所以,這些發明彙編語言的程式設計師用機器語言寫了一個翻譯程序,這個翻譯程序能把彙編語言的代碼翻譯成機器語言的代碼。
雖然彙編語言給大家帶來了很大的方便,可是彙編語言實在太繁瑣了,一個簡單的乘法,需要分解成一大堆的彙編代碼。所以,在不久之後,程式設計師們又開發了新的程式語言,也就是我們現在熟知的高級語言。
高級語言的優點,是非常接近人類使用的自然語言。比方說上面的乘法,用彙編語言是一堆代碼,而用高級語言,可以直接用乘號來書寫。我想,一個沒有學過編程的人,都能看明白高級語言中的加減乘除。
和彙編語言類似,高級語言也有翻譯程序。這個翻譯程序是把高級語言翻譯成彙編語言,然後再用彙編語言的翻譯程序,把它最終翻譯成機器語言。由於高級語言和自然語言很像,它和彙編語言之間的鴻溝是巨大的,所以,高級語言在翻譯成彙編語言的時候,會出現超大量的代碼冗餘。什麼意思呢?就是會翻譯出超大量的無用彙編代碼。如果一個程式設計師懂彙編語言的話,就能看出,自己用高級語言寫的代碼翻譯出了很多沒必要的重複動作。這也是沒辦法的事情,能翻譯成現在這個樣子,已經是高手程式設計師前輩的極限了。
這樣你就明白一個道理:同樣一個程序,用機器語言和彙編語言寫出來的代碼,執行效率是差不多的;而用高級語言寫出的代碼,執行效率要慢上很多。
不僅如此,彙編語言寫出的代碼佔用空間也小。比方說,同樣的記事本程序,Windows自帶的用高級語言寫的記事本大小差不多是200kb,而且還需要很多額外文件的支持;而用彙編語言寫出的同樣功能的記事本,大小只有10kb左右。
一般來講,高級語言的功能越複雜,翻譯成的彙編代碼冗餘越大。而C++語言的基礎功能是比較簡單的,這些功能翻譯成彙編語言的時候,冗餘量是可以承受的。所以,C++語言寫出的程序效率是比較高的。
也就是說,我們只需要學會C++語言的基礎功能,就能編寫C++程序了。我歸納總結了一下,C++語言的基礎概念是12個。所以,下面提到的12個C++語言的基礎概念是重中之重。
概念一:語法
高級語言就是一行一行的代碼,這些代碼是按照一定的規律寫出來的。就好像我們寫英語的句子一樣,是有一定規律的,而這個規律就是語法。和英語類似,C++語言的每行代碼用到的規律就是所謂的語法了。我們可以再簡化一下,我們要學的C++語法就是下面11個概念。
下面11個概念,可以說是C++的11個語法。語法相當於公式,在具體的運用中只要符合公式,那代碼就是合法的(符合語法)。
概念二:關鍵字和標識符
一個語法的組成,有可變的部分和不可變的部分。比方說加法的語法是:
數字1 + 數字2
那麼,數字1和數字2是可變的,中間的「+」是不可變的。在C++語法中,除了像加減乘除的符號不可變之外,還有很多功能特定的單詞也是不可變的,這些不可變的單詞就是所謂的關鍵字了。所有的關鍵字,都是C++語言中為了完成某一特定任務而設計的。對於寫遊戲程序而言,我們需要掌握的關鍵字彙總如下:
暫時不需要理解,如果能強行記憶下來會更好。
然後就是可變的內容了。可變內容除了數字和字母外,還有自定義的符號組合,這些符號組合還有一個專有名詞——標識符。標識符可以用於任何需要字母組合的地方。比方說變量和函數名稱。總之,你把標識符理解成C++語言中「取名字」的規矩就可以了。
規矩大約是下面3點:
(1)所有字母、所有數字以及下劃線「_」的隨機組合都是標識符。
(2)在C++語言中,大小寫字母是區分開來的,也就是說,標識符abc和標識符Abc是完全不一樣的「名字」。
(3)所有的特殊符號都不能出現在標識符中。除了下劃線「_」以外,鍵盤上能打出來的任何符號都不行。
通過關鍵字和標識符,我們就能寫出絕大部分的代碼了。
需要提一點的是,C++語言中的空格和換行。
一般的空格和換行都會被C++的翻譯程序略過。比方說
abc = 1 + c和abc = 1 + c以及abc =1 +c
在C++程式語言的翻譯程序眼中是完全一樣的內容。這樣會帶來一個問題:由於空格和換行已經失去了意義,所以,需要有特定的符號來表明某一行(記住,可能不在同一行)的代碼已經完畢,這個符號就是分號「;」(記住,是英文狀態下的符號)。像上面示例的代碼,正確的寫法應該是:
語句1:abc = 1 + c;語句2:abc = 1 + c;語句3:abc =1 +c;3個語句效果是完全一樣的
就是在結束的地方加上分號。這個分號很重要,是初學者最容易忘記的小細節。如果代碼忘記了分號,C++的翻譯程序就會讀不懂,從而給我們報錯。
概念三:注釋
即使高級語言已經很接近自然語言了,可由於代碼一般比較龐大,程式設計師很有可能寫到後面就忘記自己前面寫的代碼是什麼意思了。編程的過程是把問題分解的過程,最後可能會分解成一堆加減乘除,過了段時間可能真的忘了自己寫了啥。所以,給代碼加注釋變得非常重要。注釋就是解釋,相當於解釋一下這行代碼在幹什麼。
注釋有兩種方式:行注釋以及多行注釋。
行注釋就是符號「//」雙斜槓後面的內容,多行注釋是符號「/*」和符號「*/」之間的內容。比方說上面的代碼,可以這樣注釋:
abc = 1 + c; //移動的步數增加1
也可以這樣注釋:
abc = 1 + c; /*移動的步數增加1*/
我們建議,全部使用行注釋,也就是「//」注釋,避免使用多行注釋。這一點記住就行,因為這是我們多年編程經驗的總結。