第二版自序 : 二版與初版 差異

不可諱言的,坊間介紹 C++ 程式語言的書籍早已經是汗牛充棟,似乎沒有必要再花費精力 另外寫一本類似的書。尤其是對在學校任教的老師而言, 寫書所須投入的精力與其所獲得的回報還 遠比不上老老實實地發表研究論文來得實際。 然而多年來的教學經驗,許多 C++ 程式設計的書籍讓我很不放心地讓我的學 生閱讀,尤其是其中有許多暢銷的 C++ 中譯教科書,其內容是巨細靡遺地介紹 一些不知何時會用到的語法, 讓我不禁回想起以前閱讀這些書的不愉快經驗。 為了不希望我的學生與我一樣步入相同的歷程, 激起我想撰寫一本不一樣的程式語言教科書的強烈動機。

相對於其它種程式語言,C++ 程式語言的語法是較為複雜繁瑣的。 在許多 C++ 程式語言的參考書中, 初學者往往在了解程式語法的各種變化之前就已遭淹沒,更不用說是要活用。 在我的理解中,C++ 程式語言是一個聰明人所設計出來的,C++ 程式語言的語法多半來自一貫的邏輯,而且是講道理的,並不須要太多的記憶。 事實上,往往只要了解一些基本概念,一些複雜的語法都可 用邏輯推斷就可以知道原因。 讀者將會發現本書在許多地方,刻意地花費相當的篇幅說明一些似乎很 明顯的概念,其主要的目的是要讀者去理解語法背後設計的理念。 對理工學院的學生而言,講道理,減少背誦,是最為自然的學習方式。 在這本程式語言的書,你將很少看到死板板的條文,告訴你什麼是對的,什麼是錯的。

本書在內容安排上大致可以分成三大部份, 第一部份為基礎程式設計篇,總共包含前八章,約佔全書三成篇幅, 此部份為 C++ 語言與傳統程式語言重疊的 部份,對只想學習一些基本程式設計的讀者而言, 熟悉第一部份的內容就足夠解決許多問題,同時也具備了學習其它種程式語言的基礎。 但如果讀者學習的目的是要認識並且熟用 C++ 語言所強調的物件導向程式設計理念, 則第二部份由第九章到第十六章的內容就須詳加閱讀, 這是 C++ 程式語言之所 以稱為 C 加加 的主要原因。 本書的第三部份包含末四章,雖然只有短短的四章, 但篇幅也佔了全書的三成。第三部份的內容幾近完整地介紹標準樣板函式庫 (Standard Template Library) 的使用方法,對須要更進一步深入學習 C++ 程式語言的人而言,第三部份是不能加以忽略的。以筆者的經驗而言, 讀者若能熟用第三部份的標準樣板函式庫, 你將會發現這個由 STL 所開拓出來的 C++ 異想世界突然使得程式設計變得很好玩。

本書各部份的每一章標題與建議的閱讀順序如下:

對教授基礎程式設計課程的教師而言,可以僅講授第一部份的內容, 在每週 3 小時的授課時數下,可以輕易的在一學期內講授完畢, 在此筆者建議須讓學生多花費一些時間撰寫於第四章內的作業習題, 因為初學者的程式設計能力好壞就是建立在能否活用迴圈與邏輯運算的基礎上。 對教授 C++ 程式語言為主的課程而言, 以筆者的經驗,可以在一學期內將前十二章教授完畢。 至於其餘未教授的內容,可以選擇在進階的課程中講授,或者當為學生自修的參考。

本書各章的程式範例與大多數的習題解答都被整理放置於 http://www.math.ncu.edu.tw/~ziyou/c++ 網址, 在網頁的下載區也同時存放了一些學習輔助文件,例如:勘誤檔, 考古題與「如何學寫程式」一文等等, 後者用來教授初學者如何藉由抽象的構思來撰寫實質的程式。 網頁內也另外搜集了一些有趣且稍具挑戰性的程式問題供讀者習練。 此外筆者另備有九百多張的教學投影片可供老師授課參考。 為方便讀者閱讀,本書於許多關鍵字的右上角都印有數字上標, 用以表示此關鍵字的參考頁數,讀者若對關鍵字有所疑惑, 可以在參閱該字說明後再繼續閱讀。

如同學習傳統的語言文字一般,要將程式語言學好,不管是老師或者是學生, 唯一方法就是不斷的練習,須要真正地花時間撰寫程式。 以筆者多年來學習程式語言的經驗,每當要學習新的程式語言時, 也須要老老實實的一行一行撰寫, 經過一段時間的跌跌撞撞後才能真正地靈活運用。 筆者建議讀者在了解各章所提供的程式範例後, 應試著利用自己的理解自行撰寫一次,藉以加深印象。 本書在每章的末尾都提供了許多題目以供習練, 筆者鼓勵讀者多加練習, 親自撰寫程式解決問題是增加程式語言操作熟悉度的不二法門。

本書的編排採用陳弘毅教授為 Linux 作業系統所 開發的 ChiLatex (ChiLaTeX),這是一種非常好用的中文 LaTeX。 事實上,全書除了須在極少數地方變更所使用的中文字型外, 這套中文 LaTeX 簡便到筆者幾乎不察覺到它的存在。 在撰寫過程中,常常受到陳老師的熱心協助,特此致上感謝之意。 此外筆者也要感謝多年來所有修課的學生, 沒有他們,這本書不會有存在的一天。 希望本書對未來的學生與對程式設計有興趣的人在其學習過程中有所幫助。 讀者若對本書內容有所建議與批評,歡迎來函告知, 本人的電子郵件地址為 ziyou@math.ncu.edu.tw

子由 於中央大學數學系

2006-11-17