《C++程序設(shè)計》實驗指導(dǎo)書

上傳人:仙*** 文檔編號:28009223 上傳時間:2021-08-22 格式:DOC 頁數(shù):45 大?。?05.50KB
收藏 版權(quán)申訴 舉報 下載
《C++程序設(shè)計》實驗指導(dǎo)書_第1頁
第1頁 / 共45頁
《C++程序設(shè)計》實驗指導(dǎo)書_第2頁
第2頁 / 共45頁
《C++程序設(shè)計》實驗指導(dǎo)書_第3頁
第3頁 / 共45頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《C++程序設(shè)計》實驗指導(dǎo)書》由會員分享,可在線閱讀,更多相關(guān)《《C++程序設(shè)計》實驗指導(dǎo)書(45頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、 《C++程序設(shè)計》實驗指導(dǎo)書 董曉梅 張?zhí)斐? 編寫 東北大學(xué) 信息科學(xué)與工程學(xué)院 計算機(jī)軟件與理論研究所 2006年3月 前 言 本書是本科生課程《C++語言程序設(shè)計》的配套實驗指導(dǎo)書。C++語言程序設(shè)計是一門實踐性很強(qiáng)的課程,學(xué)習(xí)C++語言程序設(shè)計最重要的環(huán)節(jié)就是實踐,而不可能僅僅通過閱讀教科書或聽課來掌握。 書中內(nèi)容包括13個精心設(shè)計的實驗,與《C++語言程序設(shè)計》課程的各章內(nèi)容配合,每一個實驗都包括“實驗?zāi)康摹?、“實驗要求”、“實驗?nèi)容及實驗步驟”和“思考題”幾部分,使學(xué)生在實踐中達(dá)到對教科書和課堂內(nèi)容的深

2、入理解和熟練掌握。 本書中的實驗內(nèi)容不僅可以指導(dǎo)學(xué)生上機(jī)練習(xí),也可以由教師作為例題在課堂上演示,以豐富教學(xué)內(nèi)容。 目錄 前 言 1 Microsoft Visual C++ 6.0開發(fā)環(huán)境簡介 1 Exercise 1 熟悉語言及程序開發(fā)環(huán)境 3 Exercise 2 C++簡單程序設(shè)計 10 Exercise 3 函數(shù)的應(yīng)用 15 Exercise 4 類與對象 18 Exercise 5 作用域與多文件程序 21 Exercise 6 數(shù)組、指針與字符串 24 Exercise 7 繼承與派生 27 Exercise 8 多態(tài)性 29

3、 Exercise 9 工資管理程序設(shè)計 30 Exercise 10 模板 31 Exercise 11 流類庫與輸入/輸出 32 Exercise 12 異常處理 35 Exercise 13 Windows編程基礎(chǔ) 36 Microsoft Visual C++ 6.0開發(fā)環(huán)境簡介 Developer Studio是VisualC++6.0的核心部分,是Microsoft Windows環(huán)境下的一個集成開發(fā)環(huán)境,集成了開發(fā)C++或 C應(yīng)用程序所需要的所有工具和C++編譯器。 1主窗口 包括標(biāo)題欄、菜單欄、工具欄、項目工作區(qū)窗口、文檔窗口、輸出窗口和狀

4、態(tài)欄,如圖1所示。 圖1 Visual C++6.0集成開發(fā)平臺的主窗口 2菜單欄 包括以下菜單項:File, Edit, View, Insert, Project, Build, Tools, Windows和 Help。 3工具欄 默認(rèn)時顯示三個工具欄:Standard, Build和WizardBar。 4采用項目開發(fā)應(yīng)用程序 采用項目開發(fā)一個應(yīng)用程序的一般步驟如下: (1) 創(chuàng)建一個項目,系統(tǒng)自動創(chuàng)建了應(yīng)用程序所需的基本文件。 (2) 采用工作區(qū)窗口建立項目中的類、文件和資源。 (3) 將文件添加到項目中,或從項目中刪除文件。 (4) 編輯項目中的源代碼和

5、資源。 (5) 連編項目。 (6) 執(zhí)行應(yīng)用程序。 Exercise 1 熟悉語言及程序開發(fā)環(huán)境 1 實驗?zāi)康? 熟悉Microsoft Visual C++ 6.0集成開發(fā)環(huán)境,學(xué)習(xí)創(chuàng)建控制臺應(yīng)用程序項目、編輯源程序、編譯和調(diào)試程序。 2 實驗要求 (1)熟悉程序開發(fā)環(huán)境 (2)編輯源程序 (3)編譯并調(diào)試程序 3 實驗內(nèi)容及實驗步驟 3.1 熟悉Microsoft Visual Studio 6.0 的開發(fā)環(huán)境 (1) 啟動Visual C++6.0; (2) 用鼠標(biāo)左鍵分別單擊各主菜單項,觀察各下拉菜單的項目內(nèi)容; (3) 單擊“文件>新建”,觀察彈出的對

6、話框; (4) 分別單擊“新建”對話框的各選項卡,查看其中的內(nèi)容; (5) 單擊“結(jié)束”按鈕,關(guān)閉對話框; (6) 單擊“幫助>幫助目錄”,熟悉幫助的內(nèi)容和使用方法。 3.2 編輯并調(diào)試下面的程序 3.2.1 在Visual C++環(huán)境中編輯并調(diào)試下面的程序 (1)啟動Visual C++6.0; (2)向AppWizard提供關(guān)于新項目的有關(guān)信息: (a)單擊“文件>新建”, (b)在“新建”對話框中: 單擊“工程”選項卡; 在列表中選中“Win32 Console Application”; 在名為“工程”的文本框中輸入項目名“Time” 在“位置”

7、文本框中設(shè)置項目的位置; 選擇“創(chuàng)建新工作區(qū)”選項; 確認(rèn)在“平臺”列表框中選中了“Win32”; 單擊“確定”按鈕。 以上過程如圖1.1所示。 (3)選擇項目類型:An empty project。 (4)單擊“完成”按鈕。 (5)在開發(fā)環(huán)境的主窗口中單擊“插入>新建類”,類型為“Generic Class”,名字為“TimeType”,單擊“確定”。見圖1.2。 圖1.1向AppWizard提供關(guān)于新項目的有關(guān)信息 圖1.2 新建類 (6)在左側(cè)的“Class View”中選擇類“TimeType”,單擊右鍵,選擇“添加成員變量”,在彈出的對話框中填入變量

8、hrs的類型和名稱,見圖1.3和圖1.4;重復(fù)此過程,加入成員變量mins和secs。 圖1.3 選擇類“TimeType”,單擊右鍵 圖1.4 添加成員變量 (7)選擇類“TimeType”,單擊右鍵,選擇“添加成員函數(shù)”,在彈出的對話框中填入函數(shù)Set的原型說明,并在代碼編輯窗口中填入函數(shù)體的代碼,見圖1.5和圖1.6;重復(fù)此過程,加入所有的成員函數(shù)。 圖1.5添加成員函數(shù) 圖1.6 添加代碼 (8)保存文件。 (9)單擊“文件>新建”,在“新建”對話框的“文件”選項卡中選擇“C++源文件”,名字為“diary”。 (10)在代碼編輯窗口中寫入代碼,保存文件

9、。 (11)編譯和執(zhí)行程序:單擊“編譯>構(gòu)件Time.exe”,或者按F7鍵,生成可執(zhí)行文件Time.exe;單擊“編譯>執(zhí)行Time.exe”,或者同時按下“Ctrl”和“F5”鍵,執(zhí)行程序,查看運(yùn)行結(jié)果。 3.2.2 源程序: (1)文件TimeType.h: //“TimeType.h” class TimeType{ public: void Set(int hours, int minutes, int seconds); void Increment(); void Write() const; bool Equal(TimeType othe

10、rTime) const; bool LessThan(TimeType otherTime) const; private: int hrs; int mins; int secs; }; (2)文件TimeType.cpp: //“TimeType.cpp” #include “timetype.h” #include void TimeType::Set(int hours, int minutes, int seconds) { hrs = hours; mins = minutes; secs = s

11、econds; } void TimeType::Increment() { secs++; if (secs>59) { secs=0; mins++; if (mins>59) { mins=0; hrs++; if (hrs>23) hrs=0; } } } void TimeType::Write() const { if (hrs<10) cout << ‘0’; cout << hrs << ‘:’; if (mins<10) cout <<‘0’; cout << mins << ‘:

12、’; if (secs<10) cout <<‘0’; cout << secs; } bool TimeType::Equal(TimeType otherTime) const { return (hrs==otherTime.hrs && mins==otherTime.mins && secs==otherTime.secs); } bool TimeType::LessThan(TimeType otherTime) const { return (hrs

13、ime.mins||hrs==otherTime.hrs && mins==otherTime.mins && secs #include "TimeType.h" int main() { TimeType time; int hours; int minutes; int seconds; cout<<"Enter a time (use hours < 0 to quit): "; cin>>hours>>mi

14、nutes>>seconds; while(hours>=0) { time.Set(hours, minutes, seconds); time.Increment(); cout<<"Incremented time is "; time.Write(); cout<>hours>>minutes>>seconds; } return 0; } 4 思考題 (1) 如何啟動Microsoft Visual

15、Studio 6.0? (2) 如何用AppWizard新建一個控制臺項目? (3) 如何新建一個類,并添加類的成員? (4) 如何編譯和連接一個程序? (5) 如何執(zhí)行一個程序? (6) 如何使用幫助? Exercise 2 C++簡單程序設(shè)計 1 實驗?zāi)康? (1)學(xué)會編寫簡單的C++程序。 (2)復(fù)習(xí)基本數(shù)據(jù)類型變量和常量的應(yīng)用。 (3)復(fù)習(xí)運(yùn)算符與表達(dá)式的應(yīng)用。 (4)復(fù)習(xí)結(jié)構(gòu)化程序設(shè)計基本控制結(jié)構(gòu)的運(yùn)用。 (5)復(fù)習(xí)自定義數(shù)據(jù)類型的應(yīng)用。 (6)練習(xí)使用簡單的輸入輸出。 (7)觀察頭文件的作用。 (8)學(xué)會使用Visual C++6.0開發(fā)環(huán)境中的de

16、bug調(diào)試功能:單步執(zhí)行、設(shè)置斷點、觀察變量值。 2 實驗要求 (1)輸入并運(yùn)行教材《C++語言程序設(shè)計》中的例題2-7,即:用do-while語句編程,求自然數(shù)1~10之和。程序正確運(yùn)行之后,去掉源程序中#include語句,重新編譯,觀察會有什么問題。 (2)將do-while語句用for語句代替,完成相同的功能。 (3)編程計算圖形的面積。程序可計算圓形、長方形、正方形的面積,運(yùn)行時先提示用戶選擇圖形的類型,然后,對圓形要求用戶輸入半徑值,對長方形要求用戶輸入長和寬的值,對正方形要求用戶輸入邊長的值,計算出面積的值后將其顯示出來。 (4)使用debug調(diào)試功能觀察任務(wù)3程序運(yùn)行

17、中變量值的變化情況。 (5)定義一個表示時間的結(jié)構(gòu)體,可以精確表示年、月、日、小時、分、秒;提示用戶輸入年、月、日、小時、分、秒的值,然后完整地顯示出來。 3 實驗內(nèi)容及實驗步驟 (1) 建立一個控制臺應(yīng)用程序項目lab2_1,向其中添加一個C++源文件lab2_1.cpp(方法見實驗1),輸入教材《C++語言程序設(shè)計》中例2-7的代碼,檢查一下確認(rèn)沒有輸入錯誤,選擇菜單命令Build | Build 1ab2_1.exe編譯源程序,再選擇Build | Execute運(yùn)行程序,觀察輸出是否與教材中的答案一致。 (2)程序正確運(yùn)行之后,在源程序第一行“#include

18、.h>”前面加注釋標(biāo)記“//”使之成為注釋行,重新編譯,查看此時編譯器會輸出什么樣的提示。 現(xiàn)在,刪除注釋標(biāo)記,將程序恢復(fù)正確。 (3)另建立一個項目lab2_2,包含一個C++源程序1ab2_2.cpp,將do-while語句用for語句代替,完成與實驗任務(wù)1相同的功能。 (4)建立項目lab2_3,計算圖形的面積。圓形的面積計算公式為S=PI*r*r,長方形的面積計算公式為S=a*b,正方形的面積計算公式為S=a*a。程序中定義一個整型變量iType表示圖形的類型,用cout語句輸出提示信息讓用戶選擇圖形的類型,用cin讀入iType的值,然后,使用switch語句判斷圖形的類型,分

19、別提示用戶輸入需要的參數(shù)值,計算出面積的值后用cout語句顯示出來。最后,編譯運(yùn)行程序。 (5)學(xué)習(xí)簡單的debug調(diào)試功能,參考程序如下: ∥lab2_3.cpp #include const float PI=3.1416; void main() { int iType; float radius,a,b,area; COUt<<”圖形的類型為?(1為圓形,2為長方形,3為正方形):”; cin>>iType; switch(iType) { case 1: cout<<”

20、圓的半徑為:”; cin>>radius; area=PI*radius*radius ; cout<<”面積為:”<>a; cout<<”矩形的寬為:”; cin>>b; area=a*b; cout<<”面積為:”<>a; area=a*a

21、; cout<<”面積為:”<

22、有關(guān)變量的值。 3)然后選擇菜單命令Build | Start Debug | Go,或按下快捷鍵F5,系統(tǒng)進(jìn)入Debug(調(diào)試)狀態(tài),程序開始運(yùn)行,一個DOS窗口出現(xiàn),此時,Visual Studio的外觀如圖2.2所示,程序暫停在斷點處。 斷點 圖2.2 調(diào)試狀態(tài) 4)單步執(zhí)行:從Debug菜單或Debug工具欄中單擊Step Over選項或按鈕兩次。在程序運(yùn)行的DOS窗口中輸人選擇的圖形類型,例如,輸入3,代表正方形,這時,回到Visual Studio中,把鼠標(biāo)放在變量名iType上片刻,可看到出現(xiàn)了一個提示:iType=3;此時,在Variables窗口中也可看到

23、iType以及其他變量的值。 單步執(zhí)行時每次執(zhí)行一行語句,便于跟蹤程序的執(zhí)行流程。因此為了調(diào)試方便,需要單步執(zhí)行的語句不要與其它語句寫在一行中。 5)在Watch窗口中,在Name欄中輸入iType,按回車鍵,可看到Value欄中出現(xiàn)3,這是變量iType現(xiàn)在的值(如果沒看到Variables窗口或Watch窗口,可通過View菜單的Debug Windows | Variables或Debug Windows | Watch選項打開它們)。圖2—3是此時Variables窗口和Watch窗口的狀態(tài)。 6)繼續(xù)執(zhí)行程序,參照上述的方法,再試試Debug菜單欄中別的菜單項,熟悉Debug的

24、各種方法。 (6)建立一個項目lab2_4,包含一個C++源程序lab2_4.cpp。定義一個表示時間的結(jié)構(gòu)體,有表示年、月、日、小時、分、秒的成員,可以使用short類型;在主程序中實現(xiàn)輸入輸出。 4 思考題 (1) 如何在集成環(huán)境中建立一個簡單的C++程序? (2) 如何設(shè)置斷點? (3) 如何單步運(yùn)行一個程序? (4) 如何觀察程序運(yùn)行過程中某個變量的值? Exercise 3 函數(shù)的應(yīng)用 1 實驗?zāi)康? (1)掌握函數(shù)的定義和調(diào)用方法 (2)練習(xí)重載函數(shù)的使用。 (3)練習(xí)使用系統(tǒng)函數(shù)。 (4)學(xué)習(xí)使用VC++的debug調(diào)試功能,使用step into追蹤到

25、函數(shù)內(nèi)部。 2 實驗要求 (1)編寫一個函數(shù)把華氏溫度轉(zhuǎn)換為攝氏溫度,轉(zhuǎn)換公式如下 C=(F-32)*5/9 (2)編寫重載函數(shù)Max1可分別求兩個整數(shù),三個整數(shù),兩個雙精度數(shù),三個雙精度數(shù)的最大值。 (3)使用系統(tǒng)函數(shù)pow(x,y)計算xy的值,注意包含頭文件math.h。 (4)用遞歸的方法編寫函數(shù)求Fibonacci級數(shù),觀察遞歸調(diào)用的過程 3 實驗內(nèi)容及實驗步驟 (1)編寫函數(shù)float Convert(float TempFer),參數(shù)和返回值都為float類型,實現(xiàn)算法C=(F-32)*5/9,在main()函數(shù)中實現(xiàn)輸入、輸出

26、。程序名:lab3_1.cpp。 (2) 分別編寫四個同名函數(shù)max1,實現(xiàn)函數(shù)重載,在main()函數(shù)中測試函數(shù)功能。程序名:lab3_2.cpp (3)在main()函數(shù)中提示輸入兩個整數(shù)x、y,使用cin語句得到x、y的值,調(diào)用pow(x,y)函數(shù)計算x的y次冪的結(jié)果,再顯示出來。程序名:lab3_4.cpp (4)編寫遞歸函數(shù)int fib(int n),在主程序中輸入n的值,調(diào)用fib函數(shù)計算Fibonacci級數(shù)。 公式為 fib(n)=fib(n-1)+fib(n-2),n>2; fib(1)=fib(2)=1。 使用if語句判斷函數(shù)的出口,在程序中用cout語句輸出

27、提示信息。程序名:lab3_5.cpp (5)使用debug中的Step Into追蹤到函數(shù)內(nèi)部,觀察函數(shù)的調(diào)用過程,參考程序如下: //lab3_5 #include int fib(int n); int main() { int n,answer; cout<<”Enter number:”; cin>>n; cout<<”\n\n”; answer=fib(n); cout<

28、n<<”th Fibonacci number\n”; return 0; } int fib(int n) { cout<<”Processing fib(“<

29、 Step in,或按下快捷鍵F11,系統(tǒng)進(jìn)入單步執(zhí)行狀態(tài),程序開始運(yùn)行,并出現(xiàn)一個DOS窗口,此時Visual Studio中光標(biāo)停在main()函數(shù)的入口處。 2)把光標(biāo)移到語句answer=fib(n)前,從Debug菜單或Debug工具欄中單擊Run to Cursor,在程序運(yùn)行的DOS窗口中按提示輸入數(shù)字10,這時回到Visual Studio中,光標(biāo)停在第11行,觀察一下n的值(觀察方法見實驗2)。 3)從Debug菜單或Debug工具欄中單擊Step Into,程序進(jìn)入fib函數(shù),觀察一下n的值,把光標(biāo)移到語句return(fib(n-2)+fib(n-1))前,從Debu

30、g菜單或Debug工具欄中單擊Run to Cursor,再單擊Step Into,程序遞歸調(diào)用fib函數(shù),又進(jìn)入fib函數(shù),觀察一下n的值。 4)繼續(xù)執(zhí)行程序,參照上述的方法,觀察程序的執(zhí)行順序,加深對函數(shù)調(diào)用和遞歸調(diào)用的理解。 5)再試試Debug菜單欄中的菜單項,熟悉Debug的各種方法。 4 思考題 (1) 如何利用系統(tǒng)函數(shù)來實現(xiàn)一些常用的功能? (2) 如何查找系統(tǒng)函數(shù)? (3) 如何實現(xiàn)函數(shù)重載? (4) 如何編寫一個遞歸程序? Exercise 4 類與對象 1 實驗?zāi)康? (1)掌握類的定義和使用。 (2)掌握類的定義和對象的聲明。 (3)復(fù)習(xí)具有不同

31、訪問屬性的成員的訪問方式。 (4)觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行過程。 (5)學(xué)習(xí)類的聚集使用方法。 (6)使用VC++的debug調(diào)試功能觀察程序流程,跟蹤觀察類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、成員函數(shù)的執(zhí)行順序。 2 實驗要求 (1)定義一個CPU類,包含等級(rank)、頻率(frequency)、電壓(voltage)等屬性,有兩個公有成員函數(shù)run、stop。其中,rank為枚舉類型CPU_Rank,定義為enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency為單位是MHz的整型數(shù),voltage為浮點型的電壓值。觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序

32、。 (2)定義一個簡單的Computer類,有數(shù)據(jù)成員芯片(cpu)、(內(nèi)存)、光驅(qū)(cdrom)等等,有兩個公有成員函數(shù)run、stop。cpu為CPU類的一個對象,ram為RAM類的一個對象,cdrom為CDROM類的一個對象,定義并實現(xiàn)這個類。 (3)(選做)設(shè)計一個用于人事管理的People(人員)類??紤]到通用性這里只抽象出所有類型人員都具有的屬性:number(編號)、sex(性別)、birthday(出生日期)、id(身份證號)等等。其中“出生日期”定義為一個“日期”類內(nèi)嵌子對象。用成員函數(shù)實現(xiàn)對人員信息的錄入和顯示。要求包括:構(gòu)造函數(shù)和析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、內(nèi)聯(lián)成員函數(shù)、

33、聚集。 3 實驗內(nèi)容及實驗步驟 (1)首先定義枚舉類型CPU_Rank, 例如enum CPU_Rank{P1=1, P2, P3, P4, P5, P6, P7},再定義CPU類,包含等級(rank)、頻率(frequency)、電壓(voltage)等私有數(shù)據(jù)成員,定義成員函數(shù)run、stop,用來輸出提示信息,在構(gòu)造函數(shù)和析構(gòu)函數(shù)中也可以輸出提示信息。在主程序中定義一個CPU的對象,調(diào)用其成員函數(shù),觀察類對象的構(gòu)造與析構(gòu)順序,以及成員函數(shù)的調(diào)用。程序名:lab4_1.cpp。 (2)使用debug調(diào)試功能觀察程序lab4_1.cpp的運(yùn)行流程,跟蹤觀

34、察類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、成員函數(shù)的執(zhí)行順序。參考程序如下: //lab4_1.cpp #include enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7}; class CPU { private: CPU_Rank rank; int frequency; float voltage; public: CPU(CPU_Rank r,int f,float v) { rank=r; frequency=f; voltage=v; cout<<”構(gòu)造了一個C

35、PU!”<

36、at v) { voltage=v; } void Run(){ cout<<”CPU 開始運(yùn)行!”<

37、)從Debug菜單或Debug工具欄中單擊Step Over,此時,光標(biāo)下移,程序準(zhǔn)備執(zhí)行CPU對象的初始化; 3)單擊Step Into,程序準(zhǔn)備執(zhí)行CPU類的構(gòu)造函數(shù); 4)連續(xù)單擊Step Over,觀察構(gòu)造函數(shù); 5)此時程序準(zhǔn)備執(zhí)行CPU對象的run()函數(shù),單擊Step Into,程序進(jìn)入run()成員函數(shù),連續(xù)單擊Step Over,直到回到main()函數(shù)。 6)繼續(xù)執(zhí)行程序,參照上述的方法,觀察程序的執(zhí)行順序,加深對類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、成員函數(shù)的執(zhí)行順序的認(rèn)識。 7)再試試Debug菜單欄中別的菜單項,熟悉Debug的各種方法。 (4)首先定義CPU類(可使用

38、第二題中的CPU類)、RAM類、CDROM類。再定義Computer類;定義私有數(shù)據(jù)成員cpu、ram、cdrom,定義公有成員函數(shù)run、stop,可在其中輸出提示信息。在主程序中定義一個Computer的對象,調(diào)用其成員函數(shù),觀察類對象及其成員變量的構(gòu)造與析構(gòu)順序,以及成員函數(shù)的調(diào)用。程序名:lab4_2.cpp. (5)使用debug調(diào)試功能觀察lab4_2.cpp程序的運(yùn)行流程,跟蹤觀察類的構(gòu)造函數(shù)、析構(gòu)函數(shù)、成員函數(shù)的執(zhí)行順序,特別注意觀察成員變量的構(gòu)造與析構(gòu)順序。 4 思考題 (1) 如何定義一個類? (2) 如何定義類的構(gòu)造函數(shù)和析構(gòu)函數(shù)? (3) 類的各成員函數(shù)的執(zhí)行

39、順序是怎樣的? (4) 類聚集時對象的構(gòu)造順序是怎樣的? Exercise 5 作用域與多文件程序 1 實驗?zāi)康? (1)掌握自動變量與靜態(tài)變量的概念。 (2)掌握函數(shù)原型、塊、函數(shù)和文件作用域的概念。 (3)掌握全局變量與局部變量的概念 (4)掌握VC6.0下多文件程序的上機(jī)調(diào)試方法 2 實驗要求 (1)調(diào)試程序段1,弄清自動變量與靜態(tài)變量的區(qū)別。 (2)調(diào)試程序段2,理解塊作用域的概念。 (3)調(diào)試程序段3,理解全局變量和局部變量的概念。 (4)使用多文件結(jié)構(gòu)編寫并調(diào)試程序,計算和的值。 3 實驗內(nèi)容及實驗步驟 (1)閱讀下列程序,寫出執(zhí)行結(jié)果,然后上機(jī)調(diào)

40、試程序,比較結(jié)果的正確性,弄清自動變量與靜態(tài)變量的區(qū)別。 #include int func(int); void main() { cout<

41、 void main() { int a=1,b=2,c=3; cout<<”a=”<

42、<”a=”<

43、.h> int a=1,b=2; int f1(int x) { int i,b=3; i=(a*b)/x; cout<<”i=”<

44、; cout<<”v=”<

45、存放在文件mainf.cpp中。 上機(jī)調(diào)試程序,掌握多文件程序的調(diào)試方法。 4 思考題 (1)總結(jié)全局變量、局部變量、靜態(tài)局部變量等的概念和使用方法。 (2)總結(jié)多文件程序的調(diào)試方法。 (3)多文件程序調(diào)試和單文件調(diào)試有哪一些相同點和不同點? Exercise 6 數(shù)組、指針與字符串 1 實驗?zāi)康? (1)學(xué)習(xí)使用數(shù)組。 (2)學(xué)習(xí)字符串?dāng)?shù)據(jù)的組織和處理。 (3)學(xué)習(xí)標(biāo)準(zhǔn)C++庫的使用。 (4)掌握指針的使用方法。 (5)練習(xí)通過Debug觀察指針的內(nèi)容及其所指的對象的內(nèi)容 (6)聯(lián)系通過動態(tài)內(nèi)存分配實現(xiàn)動態(tài)數(shù)組,并體會指針在其中的作用。 (7)分

46、別使用字符數(shù)組和標(biāo)準(zhǔn)C++庫練習(xí)處理字符串的方法。 2 實驗要求 (1)編寫并測試3*3矩陣轉(zhuǎn)置函數(shù),使用數(shù)組保存3*3矩陣。 (2)使用動態(tài)內(nèi)存分配生成動態(tài)數(shù)組來重新完成上題,使用指針實現(xiàn)函數(shù)的功能。 (3)編程實現(xiàn)兩字符串的連接。要求使用字符數(shù)組保存字符串,不要使用系統(tǒng)函數(shù)。 (4)使用string類定義字符串對象,重新實現(xiàn)上一小題。 (5)定義一個Employee類,其中包括姓名、街道地址、城市和郵編等屬性,以及change_name()和display()等函數(shù)。Display()顯示姓名、街道地址、城市和郵編等屬性,change_name()改變對象的姓名屬性。實現(xiàn)并測試

47、這個類。 (6)定義包含5個元素的對象數(shù)組,每個元素都是Employee類型的對象。 (7)(選做)修改實驗4中的選做實驗中的people(人員)類。具有的屬性如下:姓名char name[11]、編號char number[7]、性別char sex[3]、生日birthday、身份證號char id[16]。其中“出生日期”定義為一個“日期”類內(nèi)嵌對象。用成員函數(shù)實現(xiàn)對人員信息的錄入和顯示。要求包括:構(gòu)造函數(shù)和析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、內(nèi)聯(lián)成員函數(shù)、聚集。在測試程序中定義people類的對象數(shù)組,錄入數(shù)據(jù)并顯示。 3實驗內(nèi)容及實驗步驟 (1) 編寫矩陣轉(zhuǎn)置函數(shù),輸入?yún)?shù)為3*3整形數(shù)

48、組,使用循環(huán)語句實現(xiàn)矩陣元素的行列對調(diào),注意在循環(huán)語句中究竟需要對哪些元素進(jìn)行操作,編寫main()函數(shù)實現(xiàn)輸入、輸出。程序名:lab6_1.cpp。 (2) 改寫矩陣轉(zhuǎn)置函數(shù),參數(shù)為整型指針,使用指針對數(shù)組元素進(jìn)行操作,在main()函數(shù)中使用new操作符分配內(nèi)存生成動態(tài)數(shù)組。通過Debug觀察指針的內(nèi)容及其所指的對象中的內(nèi)容。程序名:lab6_2.cpp。 (3) 編程實現(xiàn)兩字符串的連接。定義字符數(shù)組保存字符串,在程序中提示用戶輸入兩個字符串,實現(xiàn)兩個字符串的連接,最后用cout語句顯示輸出。程序名:lab6_3.cpp。用cin實現(xiàn)輸入,注意,字符串的結(jié)束標(biāo)志是ASCII碼0,使用循

49、環(huán)語句進(jìn)行字符串見的字符拷貝。 (4) 使用string類定義字符串對象,編程實現(xiàn)兩字符串的連接。在string類中已重載了運(yùn)算符“+=”實現(xiàn)字符串的連接,可以使用這個功能。程序名:lab6_4.cpp。 (5) 在employee.h文件中定義Employee類。Employee類具有姓名、街道地址、城市和郵編等私有數(shù)據(jù)成員,都可以用字符型數(shù)組來表示,在成員函數(shù)中,構(gòu)造函數(shù)用來初始化所有成員數(shù)組,對字符數(shù)組的賦值可以使用字符串拷貝函數(shù)strcpy(char *,char * name);display()中使用cout顯示姓名、街道地址、城市和郵編等屬性,change_name()改變類

50、中表示姓名屬性的字符數(shù)組類型的數(shù)據(jù)成員。在主程序中定義這個類的對象并對起進(jìn)行操作。程序名:lab6_5.cpp。 (6) 使用上一小題中定義的Employee類定義對象數(shù)組emp[5],使用循環(huán)語句把數(shù)據(jù)顯示出來。程序名:lab6_6.cpp。 (7) (選作)調(diào)試下面的程序,看看運(yùn)行結(jié)果,想一想為什么會出錯。 源程序如下: # include class String{ private: char *contents; public: string(){*contents = \0;} int get_length

51、(); char *get_contents(){return contents;} void set_contents(int in_length, char *in_contents); void set_contents(char *in_contents); }; int String::get_length() { int i=0; char *p=contents; while(*p++!=\0) i++; return i; } void String::set_contents(int in_length, c

52、har *in_contents) { in_contents[in_length]=\0; contents=in_contents; } void String::set_contents(char *in_contents) { contents=in_contents; } void main() { String x,y; x.set_contents("Hello, world!"); y.set_contents(34,"This is an object_oriented program"); char *p=x.get_

53、contents(); char *q=y.get_contents(); cout<<"x="<和頭文件有何區(qū)別? (3) 有幾種方法來表示和處理數(shù)組元素? Exercise 7 繼承與派生 1 實驗?zāi)康? (1)學(xué)習(xí)定義和使用類的繼承關(guān)系,定義派生類。 (2)熟悉不同繼承方式下對基類成員的訪

54、問控制。 (3)學(xué)習(xí)利用虛基類解決二義性問題。 2 實驗要求 (1)定義一個基類Animal,有私有整型成員變量age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(int n)中直接給age賦值,看看會有什么問題,把a(bǔ)ge 改為公有成員變量,還回有問題嗎?編程試之。 (2)定義一個基類BaseClass,有整型變量Number,構(gòu)造其派生類DerivedClass,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。 (3)定義一個車(vehicle)基類,具有Maxspeed、Weight等成員,Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車(

55、bicycle)類有高度(Height)等屬性,汽車(motorcar)類有座位數(shù)(SeatNun)等屬性。從bicycle和motorcar派生出摩托車(motorbicycle)類,在繼承過程中,注意把vehicle設(shè)置為虛基類。如果不把vehicle設(shè)置為虛基類,會有什么問題?編程試之。 3 實驗內(nèi)容及實驗步驟 (1)編寫程序定義基類Animal,成員變量age定義為私有的。構(gòu)造派生類dog,在其成員函數(shù)SetAge(int n)中直接對age賦值時,會出現(xiàn)類似以下的錯誤提示: error C2248 : ‘a(chǎn)ge’ : cannot access private member

56、declared in class ‘Animal’ error C2248 : ‘a(chǎn)ge’ : cannot access private member declared in class ‘Animal’ 把a(bǔ)ge改為公有成員變量后重新編譯就可以了。程序名:lab7_1.cpp。 (2)編寫程序定義一個基類BaseClass,構(gòu)造其派生類DerivedClass,在構(gòu)造函數(shù)和析構(gòu)函數(shù)中用cout輸出提示信息,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。程序名:lab7_2.cpp。 (3)用debug功能跟蹤程序lab7_2的執(zhí)行過程,觀察基類和派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。 (

57、4)編寫程序定義一個車(vehicle)基類,由此派生出自行車(bicycle)類、汽車(motorcar)類,注意把vehicle派生為虛基類。再從bicycle和motorcar派生出摩托車(motorcycle)類,在main()函數(shù)中測試這個類。程序名:lab7_3.cpp. 編譯成功后,把vehicle設(shè)置為非虛基類,再編譯一次,此時系統(tǒng)報錯,無法編譯成功。這是因為若不把vehicle設(shè)置為虛基類,會出現(xiàn)二義性錯誤,程序不能成功編譯。 4 思考題 (1) 如何在已有的類的基礎(chǔ)上設(shè)計新的類? (2) 基類和派生類對象的構(gòu)造順序是怎樣的? (3) 如何利用虛基類解決二義性問題?

58、 Exercise 8 多態(tài)性 1 實驗?zāi)康? (1)掌握運(yùn)算符重載的方法。 (2)學(xué)習(xí)使用虛函數(shù)實現(xiàn)動態(tài)多態(tài)性。 2. 實驗要求 (1)定義Point類,有坐標(biāo)_x,_y兩個成員變量;對Point類重載“++”(自增)、“――”(自減)運(yùn)算符,實現(xiàn)對坐標(biāo)值的改變。 (2)定義一個車(vehiele)基類,有Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類,從bicycle和motorcar派生出摩托車(motorcycle)類,它們都有Run、Stop等成員函數(shù)。觀察虛函數(shù)的作用。 (3) (選做)對實驗4中的People類重

59、載“==”運(yùn)算符和“-”運(yùn)算符,“==”運(yùn)算符判斷兩個people類對象的id屬性是否相等;“-”運(yùn)算符實現(xiàn)People類對象的賦值操作。 3. 實驗內(nèi)容及實驗步驟 (1) 編寫程序定義Point類,在類中定義整型的私有成員變量_x_y,定義成員函數(shù)Point& operator++();Point operator++(int);以實現(xiàn)對Point類重載“++”(自增)運(yùn)算符,定義成員函數(shù)Point& operator--();Point operator--(int);以實現(xiàn)對Point類重載“--”(自減)運(yùn)算符,實現(xiàn)對坐標(biāo)值的改變。程序名:1ab8_1.cpp。 (2) 編寫程序

60、定義一個車(vehicle)基類,有Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類,從bicycle和motorcar派生出摩托車(motorcycle)類,它們都有Run、Stop等成員函數(shù)。在main()函數(shù)中定義vehicle、bicycle、motorcar、motorcycle的對象,調(diào)用其Run()、Stop()函數(shù),觀察其執(zhí)行情況。再分別用vehicle類型的指針來調(diào)用這幾個對象的成員函數(shù),看看能否成功;把Run、Stop定義為虛函數(shù),再試試看。程序名:lab8_2.cpp。 4 思考題 (1) 如何將一個運(yùn)算符重載為類的成員函數(shù)

61、? (2) 如何將一個運(yùn)算符重載為類的友元函數(shù)? (3) 如何實現(xiàn)運(yùn)行時刻的多態(tài)? Exercise 9 工資管理程序設(shè)計 1 實驗?zāi)康? 綜合運(yùn)用前面學(xué)過的類定義和類的繼承、多態(tài)機(jī)制,利用面向?qū)ο蟪绦蛟O(shè)計方法,設(shè)計一個完整的程序。 2. 實驗要求 設(shè)計一個簡單的計算雇員工資的程序。假設(shè)有3類雇員——工人、銷售員和管理人員。工人的工資為每小時工資額乘當(dāng)月工作時數(shù)再加上工齡工資;銷售員工資為每小時工資額乘當(dāng)月工作時數(shù)加上銷售額提成再加上工齡工資,其中銷售額提成等于該銷售員當(dāng)月售出商品金額的1%;管理人員工資為基本工資再加上工齡工資。工齡工資就是雇員在該公司工作的工齡每增加1年,月

62、工資就增加35元。 用C++語言寫出完整的程序。 3. 實驗內(nèi)容及實驗步驟 (1)建立一個控制臺項目lab9。 (2)建立雇員基類(Employee),成員數(shù)據(jù)為:工齡;成員函數(shù)包括構(gòu)造函數(shù)、析構(gòu)函數(shù)和純虛函數(shù)salary(),用于計算工資。 (3)分別建立工人(Worker)類、銷售員(Salesman)類和管理人員(Manager)類,包括相應(yīng)的成員數(shù)據(jù)和成員函數(shù),注意,要重新定義虛函數(shù)salary()。 (4)編寫主函數(shù),分別創(chuàng)建各類雇員對象,計算相應(yīng)的工資。程序名:lab9.cpp。 4 思考題 (1) 如何利用類的繼承與派生機(jī)制來設(shè)計具有通用性的類? (2) 如何設(shè)

63、計抽象類? (3) 如何利用相同的函數(shù)實現(xiàn)不同的功能? Exercise 10 模板 1 實驗?zāi)康? 練習(xí)函數(shù)模板和類模板的定義與使用。 2 實驗要求 (1)編寫函數(shù)模板,分別實現(xiàn)求兩個整數(shù)、兩個雙精度數(shù)、三個整數(shù)、三個雙精度數(shù)的最大值。 (2)運(yùn)行教材中例9-2的程序,觀察類模板的定義和使用。 3 實驗內(nèi)容及實驗步驟 (1)建立一個控制臺項目lab10_1,在其中編寫兩個同名的函數(shù)模板Max1,其參數(shù)個數(shù)不同,分別實現(xiàn)求兩個數(shù)、三個數(shù)的最大值。編寫main()函數(shù),分別用兩個整數(shù)、兩個雙精度數(shù)、三個整數(shù)、三個雙精度數(shù)來測試,程序名:lab10_1.cpp。 (2)建立一

64、個項目lab10_2,向其中輸入教材中例9-2的程序,編譯、鏈接并運(yùn)行程序,觀察輸出結(jié)果。程序名:lab10_2.cpp。 4 思考題 (1) 函數(shù)模板有什么作用? (2) 如何定義一個函數(shù)模板? (3) 類模板有什么作用? (4) 如何定義和使用類模板? Exercise 11 流類庫與輸入/輸出 1 實驗?zāi)康? (1)熟悉流類庫中常用的類及其成員函數(shù)的用法。 (2)學(xué)習(xí)標(biāo)準(zhǔn)輸入輸出及格式控制。 (3)學(xué)習(xí)對文件的應(yīng)用方法(二進(jìn)制文件、文本文件)。 2 實驗要求 (1)觀察以下程序的輸出,注意對輸出格式的控制方法: //lab11_1.cpp #include

65、 using namespace std; #define D(a) T<<#a<

66、<

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!