《C++面向?qū)ο蟪绦蛟O計教程》共分為8章。闡述了c++的特點和開發(fā)過程;面向?qū)ο蟪绦蛟O計技術、類的定義、對象的創(chuàng)建及訪問,友元與靜態(tài)成員等基本內(nèi)容;模板編程方法,運算符重載;C++的繼承機制及虛基類,多態(tài)性,輸入輸出流,C++中的其他主題。
《C++面向?qū)ο蟪绦蛟O計教程》可作為高等院校計算機及相關專業(yè)“c++面向?qū)ο蟪绦蛟O計”課程的教材,也可供其他從事軟件開發(fā)工作的讀者參考使用。同時,也適合初學程序設計或有一定編程實踐基礎、希望突破編程難點的讀者作為自學教材。通過《C++面向?qū)ο蟪绦蛟O計教程》的學習,讀者能迅速提高C++面向?qū)ο蟪绦蛟O計的能力。
《C++面向?qū)ο蟪绦蛟O計教程》取材新穎,內(nèi)容豐富,可讀性強!禖++面向?qū)ο蟪绦蛟O計教程》充分考慮了讀者對書中部分內(nèi)容的心理適應性,對于一些容易讓讀者產(chǎn)生畏懼心理的內(nèi)容作了適當?shù)奶幚。《C++面向?qū)ο蟪绦蛟O計教程》所有程序都在Visual C++6.0、Visual C++2005、Visual C+十2005 Express、Dev C+十和MinGW Developer Studi0開發(fā)環(huán)境中進行了嚴格的測試,在作者教學網(wǎng)站上提供了大量的教學支持內(nèi)容。
作者使用過數(shù)本C++面向?qū)ο蟪绦蛟O計的教材,發(fā)現(xiàn)不少問題,C++教學的普遍結果是,學生學完了C++,但卻不會使用目前流行的C++開發(fā)工具編寫程序。而且不少教材都存在錯誤。例如某C++語言經(jīng)典教材在關于打開文件的代碼中出現(xiàn)了類似如下的代碼: ofstream outFile; // 定義文件變量
if (outFile.open("test.txt", ios::app)) // 以追加方式打開文件
{ // 打開文件失敗
cout <<"打開文件失敗!" < exit(1); // 退出程序
}上面代碼完全不能通過編譯,原因是文件流類的成員函數(shù)open()返回值類型為void,出現(xiàn)這些錯誤的原因是作者想當然按照C語言類似函數(shù)fopen()編寫代碼,沒有上機測試所寫代碼,至使學生看完書后還不能上機編程或上機編程非常困難,實際上只要上機運行很容易就能發(fā)現(xiàn)類似的錯誤及錯誤的原因,可按如下方式進行修改: ofstream outFile; // 定義文件變量
outFile.open("test.txt", ios::app); // 以追加方式打開文件
if (outFile.fail())
{ // 打開文件失敗
cout <<"打開文件失敗!" < exit(1); // 退出程序
}書籍中存在錯誤是在所難免的,但是這種潛在錯誤對讀者的影響是難以估量的。由于這類教材的讀者面太大,讀者很難有機會發(fā)現(xiàn)這種錯誤,并會一直延續(xù)這種錯誤的觀念,這類問題在一些教材中存在了十多年,甚至最近的最新版也依然存在。
傳統(tǒng)的C++教學都過于注重解釋C++語言本身,而忽視了其在具體環(huán)境中的使用指導,例如對于如下的類聲明及相關代碼: #include // 編譯預處理命令
using namespace std; // 使用命名空間std
// 聲明復數(shù)數(shù)
class Complex
{
private:
// 數(shù)據(jù)成員
double real; // 實部
double image; // 虛部
public:
// 公有函數(shù)
Complex(double r = 0, double i = 0): real(r), image(i){} // 構造函數(shù)
friend Complex operator+(const Complex andz1, const Complex andz2) // 復數(shù)加法
{ return Complex(z1.real+z2.real, z1.image+z2.image); }
…
};上面的類聲明及相關代碼在Visual C++ 2005、Visual C++ 2005 Express、Dev-C++ 4.9.9.2和MinGW Developer Studio 2.05都能正常通過運行,但在Visual C++ 6.0 SP6下會出現(xiàn)編譯時錯誤,是Visual C++ 6.0的一個Bug,在Visual C++ 6.0中可將: #include // 編譯預處理命令
using namespace std; // 使用命名空間std 改為: #include // 編譯預處理命令
#include // 包含system()的聲明這時才可正常運行,又比如對于輸入運算符“>>”和輸出運算符“<<”重載為類的友元函數(shù)時,采用標準頭文件iostrteam,在Visual C++ 6.0 SP6、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++ 4.9.9.2和MinGW Developer Studio 2.05中都不能通過編譯,只能在Visual C++ 6.0中采用傳統(tǒng)的頭文件iostream.h才能通過編譯。但將輸入運算符 ">>" 和輸出運算符“<<”重載為普通函數(shù)時無任何編譯問題。
可惜的是,作者還沒有發(fā)現(xiàn)哪本教材對上面類似的具體編程環(huán)境進行詳細指導,這類教材無形中大大增加了學生應用C++的難度。
本書作者經(jīng)過十多年教學及查閱大量參考資料后編寫了本書,全書共分為8章。第1章闡述C++的主要特點及C++程序開發(fā)過程,還詳細介紹了C++在非面向?qū)ο蠓矫娴某S眯绿匦浴5?章介紹了面向?qū)ο蟪绦蛟O計技術,C++類的定義、對象的創(chuàng)建以及對象成員的訪問,友元與靜態(tài)成員等基本內(nèi)容。第3章介紹了模板編程方法,并對模板容易出現(xiàn)的編程問題進行詳細的討論。第4章介紹了運算符重載,重點對不同C++編譯器使用運算符重載時的兼容性問題進行具體指導。第5章著重介紹了C++的繼承機制及虛基類。第6章介紹了多態(tài)性,重點介紹了虛函數(shù)和抽象類。第7章介紹了輸入輸出流,重點討論標準輸入輸出流類、文件操作與文件流類。第8章對C++中的其他主題進行了深入闡述,這些主題都是難點,但都不是重點。如果這些內(nèi)容在前面的章節(jié)中加以討論,對于學生就會因難度過大而較難進入面向?qū)ο蟮乃季S模式,當學生已具備面向?qū)ο蟮乃季S習慣以后,再來介紹這些典型問題應該比較合適。
對于初學者,考試時往往會感到茫然而不知所措,因此本書習題包括了選擇題、填空題和編譯題。這些題目選自于考試題,可供學生期末復習,也可供教師編寫試題時參考,對教師還提供了習題參考答案。
本書在部分章節(jié)中還提供了實例研究,主要提供給那些精力充沛的學生深入學習與研究,這些實例包括對正文內(nèi)容的應用(例如第6.4節(jié)中棧的實現(xiàn)實際上就是抽象類的一個典型應用,第7.5節(jié)中的簡單工資管理系統(tǒng)就是文件操作的應用)、讀者深入學習時可能會遇到的算法(例如第3.4節(jié)中的快速排序)以及應用所學知識解決實際問題(例如第7.5節(jié)中的簡單工資管理系統(tǒng)就是文件操作實現(xiàn)簡單信息管理系統(tǒng)),通過讀者對實例研究的學習,可提高實際應用C++面向?qū)ο蟪绦蛟O計的能力,當然有一定的難度,但應比讀者的想象更易學習與掌握。
為了盡快提高讀者的實際編程能力,本書各章提供了程序陷阱,包含了在實際編程時容易出現(xiàn)的問題,也包括了正文內(nèi)容的深入討論,還包括了對C++編譯環(huán)境中存在兼容性問題進行了實用而具體的指導,這部分內(nèi)容不管對初學者還是長期編程的人都很有用。
現(xiàn)在談談有關C++編譯器的問題,在C++之外的任何編程語言中,編譯器都沒有受到過如此的重視。這是因為C++是一門非常復雜的語言,以至于編譯器也難于構造,我們常用的編譯器都不能完全符合C++標準,如下介紹一些常用的優(yōu)秀C++編譯器。
(1) Visual C++編譯器。由微軟開發(fā),現(xiàn)在主要流行Visual C++ 6.0、Visual C++ 2005以及Visual C++ 2005 Express,特點是集成開發(fā)環(huán)境用戶界面友好,信息提示準確,調(diào)試方便,對模板支持最完善;Visual C++ 6.0對硬件環(huán)境要求低,現(xiàn)在安裝的計算機最多,但對標準C++兼容只有83.43%, Visual C++ 2005與Visual C++ 2005 Express在軟件提示信息上做了進一步的優(yōu)化與改進,并且對標準C++兼容達到了98%以上的程度,但對硬件的要求較高;還有Visual C++ 2005 Express是一種輕量級的Visual C++軟件,對于編程愛好者、學生和初學者來說是很好的編程工具。微軟在2006年4月22日正式宣布 Visual Studio 2005 Express版永久免費。
(2) GCC編譯器。著名的開源C++編譯器。是類UNIX操作系統(tǒng)(例如Linux)下編寫C++程序的首選,有非常好的可移植性,可以在非常廣泛的平臺上使用,也是編寫跨平臺、嵌入式程序很好的選擇。GCC 3.3與標準C++兼容能夠達到96.15%,F(xiàn)已有一些移植在Windows環(huán)境下使用GCC編譯器的IDE(集成開發(fā)環(huán)境),例如Dev-C++與MinGW Developer Studio,其中Dev-C++是能夠讓GCC在Windows下運行的集成開發(fā)環(huán)境,提供了與專業(yè)IDE相媲美的語法高亮、代碼提示和調(diào)試等功能;MinGW Developer Studio是跨平臺下的GCC集成開發(fā)環(huán)境,目前支持 Windows、Linux和 FreeBSD;根據(jù)作者的實際使用,感覺使用GCC編譯器的IDE錯誤信息提示的智能較低,錯誤提示不太準確,還有就是對模板支持較差,但對語法檢查較嚴格,在Visual C++編譯器中編譯通過的程序可能在GCC編譯器的IDE還會顯示有錯誤信息。
本書所有算法都同時在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio中通過測試。讀者可根據(jù)實際情況選擇適當?shù)木幾g器,建議選擇Visual C++ 6.0.
教師可采取多種方式來使用本書作為講授C++面向程序設計,應該根據(jù)學生的背景知識以及課程的學時數(shù)來進行內(nèi)容的取舍。為滿足不同層次的教學需求,本教材使用了分層的思想,分層方法如下:沒有加星號“*”及雙星號“”的部分是基本內(nèi)容,適合所有讀者學習;加有星號“*”的部分適合計算機專業(yè)的讀者作為深入學習的選學部分;加有雙星號“”的部分適合于感興趣的讀者研究。
作者為本書提供了全面的教學支持,如果在教學或?qū)W習過程中發(fā)現(xiàn)與本書有關的任何問題都可以與作者聯(lián)系:youhongyue168@gmail.com,作者將盡力滿足各位的要求,并可能將解答公布在作者的教學網(wǎng)站http://cs.scu.edu.cn/~youhongyue上。在教學網(wǎng)站上將提供如下內(nèi)容。
(1) 提供書中所有例題在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio開發(fā)環(huán)境中的測試程序,今后還會提供當時流行的C++開發(fā)環(huán)境的測試程序,還提供本書作者開發(fā)的軟件包。
(2) 提供教學用PowerPoint幻燈片PPT課件。
(3) 向教師提供所有習題參考答案,對學生來講,將在每學期期末(第15周~第20周)公布解壓密碼。
(4) 提供高級語言程序設計問答專欄。
(5) 提供至少6套C++面向?qū)ο蟪绦蛟O計模擬試題及其解答,以供學生期末復習,也可供教師出考題時參考。
(6) 提供C++面向?qū)ο蟪绦蛟O計相關的其他資料(例如Dev-C++與MinGW Developer Studio軟件、流行免費C++編譯器的下載網(wǎng)址).
希望各位讀者能夠抽出寶貴的時間,將對本教材的建議或意見寄給作者,你的意見將是我們再版修訂教材的重要參考。
何凱霖、姜琳、聶清彬、黃維、游倩、鄒昌文、王文昌、周焯華、胡開文、沈潔、周德華、歐陽、文濤、文芝明和文波等人對本書做了大量的工作,包括編寫部分章節(jié),提供資料,調(diào)試算法,參與了部分內(nèi)容的編寫,在此特向他們表示感謝;作者還要感謝為本書提供直接或間接幫助的每一位朋友,由于你們熱情的幫助或鼓勵激發(fā)了作者寫好本書的信心和寫作熱情。
本書的出版要感謝清華大學出版社編輯,由于他們?yōu)楸緯某霭鎯A注了大量熱情,也由于他們具有前瞻性的眼光才讓讀者有機會看到本書。
盡管作者有良好而負責任的嚴格態(tài)度,并盡了最大努力,但由于作者水平有限,書中難免有不妥之處,因此,敬請各位讀者不吝賜教,以便作者有一個提高的機會,并在再版時盡力采用你們的意見,盡快提高本書的質(zhì)量。
作 者2010年2月
第1章 C++程序設計基礎
1.1 C++的發(fā)展和主要特點
1.1.1 C++的發(fā)展
1.1.2 C++的特點
1.2 第一個C++程序以及C++程序開發(fā)過程
1.2.1 第一個C++程序
1.2.2 C++程序開發(fā)過程
1.3 C++在非面向?qū)ο蠓矫娴某S眯绿匦?br>1.3.1 C++的輸入輸出
1.3.2 eonst定義常量
1.3.3 函數(shù)重載
1.3.4 有默認參數(shù)的函數(shù)
1.3.5 變量的引用
1.3.6 動態(tài)分配和釋放內(nèi)存的運算符new和delete
1.3.7 布爾類型
1.4 程序陷阱
1.5 習題
第2章 類和對象
2.1 由結構到類的發(fā)展
2.1.1 帶函數(shù)的結構
2.1.2 用構造函數(shù)初始化結構的對象
2.1.3 從結構到類的演化
2.2 面向?qū)ο蟪绦蛟O計技術
2.2.1 對象
2.2.2 抽象和類
2.2.3 封裝
2.2.4 繼承
2.2.5 多態(tài)性
2.3 C++類的聲明與對象的定義
2.3.1 類的聲明
2.3.2 在類體外定義成員函數(shù)
2.3.3 定義對象的方法
2.3.4 對象成員的引用
……
第3章 模板
第4章 運算符重載
第5章 繼承
第6章 多態(tài)性
第7章 輸入輸出流
第8章 C++的其他主題
附錄
參考文獻