版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C+面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)江西理工大學(xué)電氣工程與自動(dòng)化學(xué)院2015年9月目錄緒論10.1 寫(xiě)本書(shū)的目的10.2 本書(shū)的結(jié)構(gòu)安排10.3 如何使用本書(shū)2實(shí)驗(yàn)一 C+程序的運(yùn)行環(huán)境和運(yùn)行C+程序的方法31.1 實(shí)驗(yàn)?zāi)康?1.2實(shí)驗(yàn)內(nèi)容和步驟3實(shí)驗(yàn)二 C+對(duì)C 的擴(kuò)充52.1 實(shí)驗(yàn)?zāi)康?2.2 實(shí)驗(yàn)內(nèi)容52.2.1 程序閱讀52.2.2 程序設(shè)計(jì)72.3 思考題7實(shí)驗(yàn)三 類和對(duì)象(一)83.1 實(shí)驗(yàn)?zāi)康?3.2 實(shí)驗(yàn)內(nèi)容8程序閱讀83.2.2 程序設(shè)計(jì)104.3思考題10實(shí)驗(yàn)四 類和對(duì)象(二)114.1 實(shí)驗(yàn)?zāi)康?14.2 實(shí)驗(yàn)內(nèi)容11程序閱讀114.2.2 程序設(shè)計(jì)124.3思考題13實(shí)驗(yàn)五
2、運(yùn)算符重載145.1 實(shí)驗(yàn)?zāi)康?45.2 實(shí)驗(yàn)內(nèi)容14程序閱讀145.2.2 程序設(shè)計(jì)165.3思考題17實(shí)驗(yàn)六 派生與繼承186.1 實(shí)驗(yàn)?zāi)康?86.2 實(shí)驗(yàn)內(nèi)容18程序閱讀186.2.2 程序設(shè)計(jì)20實(shí)驗(yàn)七 派生與繼承多重派生217.1 實(shí)驗(yàn)?zāi)康?17.2 實(shí)驗(yàn)內(nèi)容21程序閱讀217.2.2 程序設(shè)計(jì)247.3思考題24實(shí)驗(yàn)八 C+程序、Windows程序和MFC程序258.1 實(shí)驗(yàn)?zāi)康?58.2 實(shí)驗(yàn)內(nèi)容258.2.1 實(shí)驗(yàn)描述258.2.2 實(shí)驗(yàn)步驟268.2.3 實(shí)驗(yàn)結(jié)果分析328.3思考題34實(shí)驗(yàn)九簡(jiǎn)單單文檔MFC程序設(shè)計(jì)359.1 實(shí)驗(yàn)?zāi)康?59.2 實(shí)驗(yàn)內(nèi)容359.2.1 實(shí)驗(yàn)
3、描述359.2.2 實(shí)驗(yàn)步驟369.2.3 實(shí)驗(yàn)結(jié)果419.3思考題42實(shí)驗(yàn)十簡(jiǎn)單對(duì)話框程序設(shè)計(jì)4310.1 實(shí)驗(yàn)?zāi)康?310.2 實(shí)驗(yàn)內(nèi)容4310.2.1 實(shí)驗(yàn)描述4310.2.2 實(shí)驗(yàn)步驟4310.2.3 實(shí)驗(yàn)結(jié)果5010.3思考題50實(shí)驗(yàn)十一簡(jiǎn)單數(shù)據(jù)庫(kù)程序設(shè)計(jì)5211.1 實(shí)驗(yàn)?zāi)康?211.2 實(shí)驗(yàn)內(nèi)容5211.2.1 實(shí)驗(yàn)描述5211.2.2 實(shí)驗(yàn)步驟5311.2.3 實(shí)驗(yàn)結(jié)果6011.3思考題61總結(jié)62參考書(shū)目63緒論0.1 目的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言是現(xiàn)今最流行的編程語(yǔ)言之一,C+語(yǔ)言是作為最早最流行的面向?qū)ο缶幊陶Z(yǔ)言之一而發(fā)展起來(lái)的。學(xué)好C+語(yǔ)言不僅可以從面向過(guò)程的程序設(shè)計(jì)思想過(guò)
4、渡到面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,而且可以為以后學(xué)習(xí)其它的面向?qū)ο笳Z(yǔ)言打下堅(jiān)實(shí)的基礎(chǔ),使得學(xué)習(xí)其它的面向?qū)ο缶幊陶Z(yǔ)言變得輕松、容易。實(shí)驗(yàn)作為學(xué)習(xí)C+語(yǔ)言不可缺少的一個(gè)環(huán)節(jié)不僅可以加深學(xué)生對(duì)C+面向?qū)ο笏枷氲睦斫猓瑫r(shí)可以提高學(xué)生的動(dòng)手編程能力,培養(yǎng)學(xué)生良好的編碼習(xí)慣。目前關(guān)于C+語(yǔ)言的理論教材比較多,但是適合學(xué)生練習(xí)的實(shí)驗(yàn)指導(dǎo)書(shū)卻比較少,這嚴(yán)重影響了學(xué)生對(duì)C+這門(mén)課程的學(xué)習(xí)。大多數(shù)情況下,學(xué)生學(xué)習(xí)C+語(yǔ)言之前都剛剛學(xué)習(xí)過(guò)C語(yǔ)言程序設(shè)計(jì)這門(mén)課程,從編程環(huán)境到編程語(yǔ)言同時(shí)轉(zhuǎn)換過(guò)來(lái)需要一定的時(shí)間和合理的指引,同時(shí)在學(xué)習(xí)C+理論知識(shí)的過(guò)程中,學(xué)生很少也很難把C+程序設(shè)計(jì)和現(xiàn)在社會(huì)上比較流行的基于VC6.0的
5、MFC程序設(shè)計(jì)聯(lián)系起來(lái),所以很難讓學(xué)生在學(xué)習(xí)C+語(yǔ)言的同時(shí),提升學(xué)生基于VC6.0的MFC程序設(shè)計(jì)的能力。編寫(xiě)本書(shū)的目的就是從以上幾點(diǎn)來(lái)考慮的,首先要把學(xué)生從以前的編程環(huán)境中脫離出來(lái),然后循序漸進(jìn)地介紹新的編程環(huán)境的新知識(shí)點(diǎn),同時(shí)把C+的語(yǔ)法結(jié)構(gòu)融入到基于VC6.0的MFC程序設(shè)計(jì)中去,從而實(shí)現(xiàn)學(xué)生輕松掌握C+這門(mén)程序設(shè)計(jì)語(yǔ)言和習(xí)慣編程環(huán)境以及理解C+語(yǔ)法和MFC之間的關(guān)系的目的,從而提高學(xué)生的程序設(shè)計(jì)能力和學(xué)生程序設(shè)計(jì)的成就感。0.2 結(jié)構(gòu)安排實(shí)驗(yàn)課程的安排離不開(kāi)理論課程的學(xué)習(xí),本書(shū)的編排以知識(shí)點(diǎn)為核心,理論教材藍(lán)本為C+面向?qū)ο蟪绦蛟O(shè)計(jì)教程(第2版)陳維興 林小茶編著,清華大學(xué)出版社出版。
6、通過(guò)為不同的知識(shí)點(diǎn)設(shè)計(jì)相應(yīng)的實(shí)驗(yàn)程序,來(lái)達(dá)到學(xué)生練習(xí)和理解C+語(yǔ)言面向?qū)ο蟮乃枷氲哪康?,同時(shí)本書(shū)還設(shè)計(jì)了一些程序設(shè)計(jì)課后練習(xí)題,設(shè)計(jì)本部分有三個(gè)目的:一個(gè)是有些課堂練習(xí)中沒(méi)有辦法練習(xí)到的知識(shí)點(diǎn)將在這部分體現(xiàn),指導(dǎo)老師可以根據(jù)需要來(lái)增刪課堂的講解內(nèi)容;另一個(gè)是為一部分有能力有興趣深入學(xué)習(xí)C+程序設(shè)計(jì)的同學(xué)提供一些練習(xí)題,從而提升這部分學(xué)生的程序設(shè)計(jì)能力;第三就是避免有些學(xué)生在做實(shí)驗(yàn)的過(guò)程中盲目按照指導(dǎo)書(shū)中的步驟一步一步地不加思考地寫(xiě)程序,學(xué)生要回答這些問(wèn)題,就必須看懂這些程序中隱含的知識(shí)點(diǎn),從而達(dá)到理論知識(shí)和實(shí)踐知識(shí)更好地結(jié)合。對(duì)于課堂練習(xí),本書(shū)共安排了11個(gè)實(shí)驗(yàn),共24個(gè)學(xué)時(shí),實(shí)驗(yàn)安排如下:實(shí)
7、驗(yàn)一C+程序的運(yùn)行環(huán)境和運(yùn)行C+程序的方法(2學(xué)時(shí))實(shí)驗(yàn)二C+對(duì)C 的擴(kuò)充(2學(xué)時(shí))實(shí)驗(yàn)三類和對(duì)象(一)(2學(xué)時(shí))實(shí)驗(yàn)四類和對(duì)象(二)(2學(xué)時(shí))實(shí)驗(yàn)五實(shí)驗(yàn)五 運(yùn)算符重載(2學(xué)時(shí))實(shí)驗(yàn)六派生與繼承(2學(xué)時(shí))實(shí)驗(yàn)七派生與繼承多重派生(2學(xué)時(shí))實(shí)驗(yàn)八實(shí)驗(yàn)八 C+程序、Windows程序和MFC程序(2學(xué)時(shí))實(shí)驗(yàn)九簡(jiǎn)單單文檔MFC程序設(shè)計(jì)(2學(xué)時(shí))實(shí)驗(yàn)十簡(jiǎn)單對(duì)話框程序設(shè)計(jì)(2學(xué)時(shí))實(shí)驗(yàn)十一簡(jiǎn)單數(shù)據(jù)庫(kù)程序設(shè)計(jì)(4學(xué)時(shí))0.3 如何使用本書(shū)面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言出現(xiàn)的目的就是為了設(shè)計(jì)大型的軟件系統(tǒng),但是教學(xué)過(guò)程中很難讓學(xué)生在課堂上實(shí)現(xiàn)一個(gè)大型的(甚至是成型)的系統(tǒng),所以作為教師應(yīng)該引導(dǎo)學(xué)生在實(shí)現(xiàn)一個(gè)簡(jiǎn)單的功
8、能性的程序的同時(shí)讓學(xué)生思考,思考如何把這個(gè)地方的技術(shù)實(shí)現(xiàn)到一個(gè)復(fù)雜的應(yīng)用系統(tǒng)中去;另外教師要充分利用本書(shū)中第二部分的練習(xí),引導(dǎo)學(xué)生去思考如何利用C+的相關(guān)技術(shù)從頭到尾設(shè)計(jì)一個(gè)具有實(shí)用價(jià)值的應(yīng)用程序。作為學(xué)生如果只是簡(jiǎn)單地按照本書(shū)中提供的步驟一步一步完成某一個(gè)程序,而不去思考為什么要這樣做的話,那么學(xué)生能學(xué)到的知識(shí)也僅僅是C+的語(yǔ)法而已,并不能真正理解C+面向?qū)ο蟮乃枷?,最終不能設(shè)計(jì)出好的程序來(lái)。所以學(xué)生不僅要全部實(shí)現(xiàn)本書(shū)中的課堂練習(xí),得出正確的結(jié)果,而且在完成了程序后還要思考本程序?yàn)槭裁匆@樣設(shè)計(jì),如果換成其它的程序設(shè)計(jì)語(yǔ)言會(huì)怎么實(shí)現(xiàn),只有這樣才能夠真正理解C+的精髓,從而掌握C+。另外學(xué)生在
9、學(xué)習(xí)最后四個(gè)實(shí)驗(yàn)的時(shí)候一定不要忘記前面C+語(yǔ)法知識(shí),能否合理地將C+的三大特性運(yùn)用到MFC的程序設(shè)計(jì)中是提高程序運(yùn)行效率,存儲(chǔ)效率和程序封裝性一個(gè)最有效的手段。實(shí)驗(yàn)一 C+程序的運(yùn)行環(huán)境和運(yùn)行C+程序的方法1.1 實(shí)驗(yàn)?zāi)康?1)了解所用的計(jì)算機(jī)系統(tǒng)的基本操作方法, 學(xué)會(huì)獨(dú)立使用該系統(tǒng)。(2)了解在該系統(tǒng)上如何編輯、編譯、連接和運(yùn)行一個(gè)C+程序e(3)通過(guò)運(yùn)行簡(jiǎn)單的C+程序, 初步了解C+源程序的結(jié)構(gòu)和特點(diǎn)。應(yīng)學(xué)會(huì)在一種以上的編譯環(huán)境下運(yùn)行C+程序,建議學(xué)習(xí)并掌握Visual C+ 6.0的使用方法。1.2實(shí)驗(yàn)內(nèi)容和步驟(1) 檢查所用的計(jì)算機(jī)系統(tǒng)是否已安裝了C+編譯系統(tǒng), 并確定它所在的子目錄
10、。(2) 在Visual C+環(huán)境下編譯和運(yùn)行C +程序。在第一次上機(jī)時(shí), 按以下步驟建立和運(yùn)行C+程序: 先進(jìn)入V i sual C+ 6 . 0 環(huán)境。 按照上機(jī)指導(dǎo)第9章介紹的方法, 在自己指定的子目錄建立一個(gè)名為test. cpp 的新文件(此時(shí)尚未向文件輸入內(nèi)容) 。 從鍵盤(pán)輸入以下程序(第l 章第4題) int main();int a,b;c=a+b;cout” a+b=”a+b; 選擇Build Compile test.cpp 命令, 對(duì)此源程序進(jìn)行編譯。觀察和分析編譯信息。 根據(jù)編譯信息指出的錯(cuò)誤,修改程序。再進(jìn)行編譯,如果還有錯(cuò), 再重復(fù)此過(guò)程,直到編譯不出錯(cuò)為止。 選擇
11、BuildBuild test.exe 命令,對(duì)程序進(jìn)行連接, 如果不出銷, 就會(huì)生成可執(zhí)行程序test.exe。 選擇Build- Execute test. exe 命令, 執(zhí)行可執(zhí)行程序test. exe。觀察屏幕的變化。在輸出窗口應(yīng)顯示程序運(yùn)行結(jié)果。 分析結(jié)果是否正確, 如果不正確或認(rèn)為輸出格式不理想,可以修改程序,然后重新執(zhí)行以上至步驟。此外,還可利用已有的源程序建立一個(gè)新程序。由于剛才已建立了一個(gè)名為test. cpp的源程序, 可以以它為基礎(chǔ)建立一個(gè)新程序。這樣更方便些。按以下步驟: 通過(guò)“資源管理器”或“我的電腦”找到已有源程序test. cpp。 雙擊test. cpp 圖標(biāo)
12、, 進(jìn)入Visual C +集成環(huán)境, 打開(kāi)test. cpp 。 在test. cpp 基礎(chǔ)上將源程序修改為以下內(nèi)容(第l 章第5 題) ,#include using namespace std;int main( )int a,b;c=add(a,b)cout”a+b=”cendl;return 0;int add(int x,int y);z =x+y;return(z);選擇File-Save as 命令,用新的文件名other.cpp 保存。此時(shí), other.cpp 與tesl. cpp在同一子目錄下。對(duì)新文件other. cpp 進(jìn)行編譯、連接和運(yùn)行。步驟同前。(3) 請(qǐng)思考以
13、下問(wèn)題,并上機(jī)進(jìn)行試驗(yàn)。將本實(shí)驗(yàn)中第2 個(gè)程序作以下改動(dòng):(a) 將程序第1,2 行改為下面一行#include (b) 將第3 行int main ()改為void main()( c ) 刪去main 函數(shù)中的retum 0;再運(yùn)行此程序。并對(duì)此作分析,得到必要的結(jié)論。(4) 輸入兩個(gè)整數(shù),將它們由大到小的順序輸出(本題是 C +面向?qū)ο蟪绦蛟O(shè)計(jì)第l章習(xí)題第8題) 。使用指針?lè)椒?。使用變量的引用。比較這兩種方法的特點(diǎn)和使用方法。實(shí)驗(yàn)二 C+對(duì)C 的擴(kuò)充2.1 實(shí)驗(yàn)?zāi)康?進(jìn)一步了解和熟悉VC+6.0開(kāi)發(fā)環(huán)境,學(xué)會(huì)在VC+6.0環(huán)境下調(diào)試程序;2熟悉C+中簡(jiǎn)單的標(biāo)準(zhǔn)輸入輸出函數(shù)的實(shí)用;3理解c
14、onst修飾符的作用,并學(xué)會(huì)應(yīng)用const修飾符;4理解內(nèi)置(內(nèi)聯(lián))函數(shù)的優(yōu)缺點(diǎn)并學(xué)會(huì)使用內(nèi)置函數(shù);5理解和使用函數(shù)重載以及帶默認(rèn)參數(shù)的函數(shù);6使用new和delete進(jìn)行動(dòng)態(tài)內(nèi)存管理;7理解和使用引用。2.2 實(shí)驗(yàn)內(nèi)容2.2.1 程序閱讀1理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#include using namespace std;int max_def(int x, int y)return (xy?x:y);int max_def(int x, int y, int z)int temp = 0;return (temp=(xy?x:y)z?temp:z;
15、double max_def(double x, double y)return (xy?x:y);int main()int x1 = 0;int x2 = 0;double d1 = 0.0;double d2 = 0.0;x1 = max_def(5,6);x2 = max_def(2,3,4);d1 = max_def(2.1,5.6);d2 = max_def(12.3,3.4,7.8);-coutx1=x1endl;coutx2=x2endl;coutd1=d1endl;coutd2=d2endl;-return 1;問(wèn)題一:上述程序的輸出結(jié)果是什么?答:?jiǎn)栴}二:哪些情況可以參與函
16、數(shù)的重載?答:?jiǎn)栴}三:處調(diào)用的是哪個(gè)函數(shù)?答:?jiǎn)栴}四:處的輸出結(jié)果為什么是d2=12,而不是d2=12.3?答:2理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#include using namespace std;int main()int *p1 = new int; -int *p2 = new int(0); -char *p3 = new char64; -return 1;問(wèn)題一:、處動(dòng)態(tài)申請(qǐng)內(nèi)存分別代表什么不一樣的意思?答:?jiǎn)栴}二:該程序存在什么隱患?改正該程序使隱患消除。答:3理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#incl
17、ude using namespace std;void swap(int a, int b)int temp = a;a = b;b = temp;void swap(int *a, int *b)int temp = *a;*a = *b;*b = temp;int main()int i = 5;int j = 10;coutBefore swap: i=i,j=jendl;swap(i,j); -coutAfter the first swap: i=i,j=jendl;swap(&i,&j); -coutAfter the second swap: i=i,j=jendl;retur
18、n 1;問(wèn)題一:上述程序的輸出結(jié)果是什么?答:?jiǎn)栴}二:處函數(shù)調(diào)用后并不能實(shí)現(xiàn)兩個(gè)數(shù)的交換,而處卻可以,為什么?答:?jiǎn)栴}三:處調(diào)用的是哪個(gè)重載函數(shù)?答:2.2.2 程序設(shè)計(jì)1使用函數(shù)重載的方法定義兩個(gè)重名函數(shù),分別求出整形數(shù)平面間兩點(diǎn)間距離和雙精度平面間兩點(diǎn)間距離,如果沒(méi)有輸入第二點(diǎn)的坐標(biāo)則默認(rèn)為圓點(diǎn)(0,0)。2設(shè)計(jì)一個(gè)函數(shù):exchange(float x, float y, float z),當(dāng)調(diào)用exchange(a,b,c)時(shí),將a的內(nèi)容賦值給b,b的內(nèi)容賦值給c,c的內(nèi)容賦值給a,要求采用引用的方式來(lái)實(shí)現(xiàn)。2.3 思考題1自己設(shè)計(jì)一個(gè)程序,測(cè)試const的三種用法:指向常量的指針,常
19、指針,指向常量的常指針。2編寫(xiě)一個(gè)函數(shù),實(shí)現(xiàn)兩個(gè)字符串變量的交換,要求參數(shù)用引用。實(shí)驗(yàn)三 類和對(duì)象(一)3.1 實(shí)驗(yàn)?zāi)康?類的定義;2類對(duì)象的使用;3類成員變量的定義和使用;4類成員函數(shù)的定義和使用;5理解類的作用域;6理解類的聲明;7理解類中private和public權(quán)限的聲明依據(jù)。3.2 實(shí)驗(yàn)內(nèi)容3.2.1程序閱讀1理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#include using namespace std;class CDatevoid Set(int m, int d, int y ) month = m ; day = d ; year = y ;
20、int IsLeapYear() return (year%4 = 0 & year%100 != 0)|(year%400 = 0); public:void Print() coutmonth/day/yearendl;private:int month; int day; int year;void main()CDate a; - a.Set(10,15,2007) ; a.Print();問(wèn)題一:以上程序編譯能通過(guò)嗎,為什么,應(yīng)該如何改正?答:?jiǎn)栴}二:類CDate中分別有哪些成員函數(shù)和成員變量,它們分別屬于哪種訪問(wèn)權(quán)限?答:?jiǎn)栴}三:處語(yǔ)句的意思是什么?答:2理解下面的程序,并在VC+
21、6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#include using namespace std;int month;/全局變量 int day; int year;void Set(int m,int d,int y) -a:month=m; -:day=d; :year=y;class CDatepublic: void Set(int m,int d,int y) -b :Set(m,d,y); -void Print() coutmonth/day/yearendl;private: int month; /成員變量int day; int year;void main()CDate
22、 a; a.Set(10,15,2007) ;a.Print();問(wèn)題一:處是在給成員變量賦值,還是在給全局變量賦值,如果去掉域作用符:,程序是否還能正確運(yùn)行?答:?jiǎn)栴}二:處調(diào)用的哪個(gè)函數(shù),如果去掉域作用符:,程序是否還能正確運(yùn)行?答:?jiǎn)栴}三:該程序的輸出結(jié)果是什么,試解釋該輸出結(jié)果。答:3.2.2 程序設(shè)計(jì)1需要求3 個(gè)長(zhǎng)方柱的體積,請(qǐng)編一個(gè)基于對(duì)象的程序。數(shù)據(jù)成員包括length(長(zhǎng))、width (寬) 、height (高)。要求用成員函數(shù)實(shí)現(xiàn)以下功能 由鍵盤(pán)分別輸入3 個(gè)長(zhǎng)方柱的長(zhǎng)、寬、高: 計(jì)算長(zhǎng)方柱的體積: 輸出3 個(gè)長(zhǎng)方柱的體積。編程序,上機(jī)調(diào)試并運(yùn)行。本題是C+面向?qū)ο蟪绦蛟O(shè)
23、計(jì)第2 章第6 題。4.3思考題1試設(shè)計(jì)一個(gè)復(fù)數(shù)類,該類有實(shí)部和虛部?jī)蓚€(gè)成員數(shù)據(jù),成員數(shù)據(jù)采用私有訪問(wèn)權(quán)限,同時(shí)該類有兩個(gè)共有成員函數(shù),分別用來(lái)設(shè)置成員數(shù)據(jù)和輸出成員數(shù)據(jù),在主函數(shù)中分別采用對(duì)象方式,指針?lè)绞胶鸵梅绞絹?lái)調(diào)用該類的公有函數(shù)設(shè)置和輸出成員數(shù)據(jù)。實(shí)驗(yàn)四 類和對(duì)象(二)4.1 實(shí)驗(yàn)?zāi)康?理解掌握this指針的作用和用法;2理解掌握構(gòu)造函數(shù)的定義和作用;3掌握構(gòu)造函數(shù)的使用;4理解掌握拷貝構(gòu)造函數(shù)的定義和使用;5理解掌握構(gòu)造函數(shù)的重載;6理解掌握析構(gòu)函數(shù)的定義和使用。4.2 實(shí)驗(yàn)內(nèi)容4.2.1程序閱讀1理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#include
24、 using namespace std;class CPointpublic:void Set(int x,int y);void Print();private:int x;int y;void CPoint:Set(int x,int y)x = x;y = y;void CPoint:Print()coutx=x,y=yendl;void main()CPoint pt;pt.Set(10,20);pt.Print();問(wèn)題一:以上程序編譯能通過(guò)嗎,試解釋該程序?答:?jiǎn)栴}二:以上程序的運(yùn)行結(jié)構(gòu)是否正確,如果不正確,試分析為什么,應(yīng)該如何改正?答:2理解下面的程序,并在VC+6.0下運(yùn)行
25、查看結(jié)果,回答程序后面的問(wèn)題。#include using namespace std;class CPersonpublic:void Print();private:CPerson();private:int age;char *name;CPerson:CPerson()void CPerson:Print()coutname=name,age=ageendl;void main()CPerson ps(23,張三);ps.Print();問(wèn)題一:以上程序存在三處大錯(cuò)誤,在不改變主函數(shù)內(nèi)容的前提下,試改正該程序。答:4.2.2 程序設(shè)計(jì)1設(shè)計(jì)實(shí)現(xiàn)一個(gè)CPoint類,滿足以下要求:a 該類
26、包含兩個(gè)整型成員變量x(橫坐標(biāo))和y(縱坐標(biāo)),以及一個(gè)輸出函數(shù)Print()用來(lái)輸出橫坐標(biāo)和縱坐標(biāo),要求不可以在類的外部直接訪問(wèn)成員變量;b可以采用沒(méi)有參數(shù)的構(gòu)造函數(shù)初始化對(duì)象,此時(shí)的成員變量采用默認(rèn)值0;c可以采用直接輸入?yún)?shù)的方式來(lái)初始化該類的成員變量;d可以采用其它的CPoint對(duì)象來(lái)初始化該類的成員變量;e設(shè)計(jì)一個(gè)主函數(shù)來(lái)測(cè)試以上功能。4.3思考題1設(shè)計(jì)一個(gè)CStudent(學(xué)生)類,并使CStudent類具有以下特點(diǎn):a該類具有學(xué)生姓名、學(xué)號(hào)、程序設(shè)計(jì)、信號(hào)處理、數(shù)據(jù)結(jié)構(gòu)三門(mén)課程的成績(jī);b學(xué)生全部信息由鍵盤(pán)輸入,以提高程序的適應(yīng)性;c通過(guò)成員函數(shù)統(tǒng)計(jì)學(xué)生平均成績(jī),當(dāng)課程數(shù)量增加時(shí),
27、成員函數(shù)無(wú)須修改仍可以求取平均成績(jī);d輸出學(xué)生的基本信息、各科成績(jī)與平均成績(jī);e學(xué)生對(duì)象的定義采用對(duì)象數(shù)組實(shí)現(xiàn); f統(tǒng)計(jì)不及格學(xué)生人數(shù)。實(shí)驗(yàn)五 運(yùn)算符重載5.1 實(shí)驗(yàn)?zāi)康?1) 進(jìn)一步了解運(yùn)算符重載的概念和使用方法。(2) 掌握幾種常用的運(yùn)算符重載的方法。(3) 了解轉(zhuǎn)換構(gòu)造函數(shù)的使用方法。(4) 了解在Vi s ual C+ 6.0 環(huán)境下進(jìn)行運(yùn)算符重載要注意的問(wèn)題。5.2 實(shí)驗(yàn)內(nèi)容5.2.1程序閱讀1理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#include using namespace std;class CComplexpublic:CComplex()re
28、al = 0; imag = 0;CComplex(int x,int y)real = x;imag = y;int real;int imag;CComplex operator + (CComplex obj1)-CComplex obj2(real + obj1.real, imag + obj1.imag);return obj2;void main()CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; -cout obj.real endl;cout obj.imag endl;問(wèn)題一:
29、處的運(yùn)算符重載,為什么該函數(shù)的返回值要設(shè)計(jì)成CComplex類型?答:?jiǎn)栴}二:處的運(yùn)算符重載函數(shù)調(diào)用就相當(dāng)于“obj=operator+(obj1,obj2);”,但是為什么CComplex類中的運(yùn)算符重載函數(shù)只設(shè)計(jì)了一個(gè)參數(shù)?答:2理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#include using namespace std;class CComplexpublic:CComplex()real = 0.0; imag = 0.0;CComplex(float x, float y)real = x;imag = y;CComplex operator + (C
30、Complex &obj1, CComplex &obj2)CComplex obj3(obj1.real + obj2.real, obj1.imag + obj2.imag);return obj3;CComplex &operator+(CComplex &obj)obj.real += 1;obj.imag +=1;return obj;void print()coutreal+imagiendl;private:float real;float imag;CComplex &operator-(CComplex &x)x.real -= 1;x.imag -= 1;return x;
31、void main()CComplex obj1(2.1,3.2);CComplex obj2(3.6,2.5);coutobj1=;obj1.print();coutobj2=;obj2.print();CComplex obj3 = obj1 + obj2;coutbefor+, obj3=;obj3.print();+obj3;coutafter+, obj3=;obj3.print();-obj3;coutafter-, obj3=;obj3.print();CComplex obj4 = +obj3;coutobj4=;obj4.print();問(wèn)題一:以上程序中的三個(gè)運(yùn)算符重載都有
32、錯(cuò)誤,試改正過(guò)來(lái),并分析該程序的輸出結(jié)果。答:5.2.2 程序設(shè)計(jì)1. 在以上復(fù)數(shù)類的基礎(chǔ)上,增加重載運(yùn)算符乘“*”、除“/”,實(shí)現(xiàn)復(fù)數(shù)的乘除運(yùn)算。2. 有兩個(gè)矩陣a 和b ,均為2 行3 列。求兩個(gè)矩陣之和。重載運(yùn)算符 + ,使之能用于矩陣相加. 如c=a+b, 本題是 C+面向?qū)ο蟪绦蛟O(shè)計(jì)第4 章第4 題。5.3思考題定義CPoint類,有兩個(gè)成員變量:橫坐標(biāo)(x)和縱坐標(biāo)(y),對(duì)CPoint類重載“+”(自增運(yùn)算符)、“-”(自減運(yùn)算符),實(shí)現(xiàn)對(duì)坐標(biāo)值的改變。實(shí)驗(yàn)六 派生與繼承6.1 實(shí)驗(yàn)?zāi)康?理解繼承的含義以及聲明;2理解共有派生、私有派生和保護(hù)派生的含義以及使用;3理解單派生類中構(gòu)
33、造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序。6.2 實(shí)驗(yàn)內(nèi)容6.2.1程序閱讀1理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#include using namespace std;class CBasepublic:CBase(int a):a(a)protected:void print()couta=aendl;private:int a;class CDerive : public CBasepublic:void print()CBase:print();coutb=bendl;private:int b;void main()CDerive d;d.print();CBas
34、e b;b.print();問(wèn)題一:以上程序有兩大錯(cuò)誤,試指出來(lái),并改正之?答:2理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#include using namespace std;class CBasepublic:CBase(int a):a(a)coutbase structureendl;CBase()coutbase destructureendl;void print()couta=aendl;protected:int a;class CDerive : public CBasepublic:CDerive(int a, int b,int c):CBa
35、se(a),b(b),c(c)coutderive structureendl;CDerive()coutderive destructureendl;void print()CBase:print();coutb.a=b.aendl;coutc=cendl;private:CBase b;int c;void main()CDerive d(1,2,3); -d.print();問(wèn)題一:以上程序的輸出結(jié)果是什么,說(shuō)明為什么?答:?jiǎn)栴}二:處語(yǔ)句執(zhí)行完后,d.b.a的值為多少?答:6.2.2 程序設(shè)計(jì)1定義點(diǎn)CPoint類作為基類,在此基礎(chǔ)上派生出直線CLine類和圓CCircle類,并要求基類
36、和各派生類具有以下特點(diǎn):aCLine類含有計(jì)算直線長(zhǎng)度和斜率的成員函數(shù);bCCircle類含有計(jì)算圓面積的成員函數(shù)。實(shí)驗(yàn)七 派生與繼承多重派生7.1 實(shí)驗(yàn)?zāi)康?理解多重派生的定義;2理解多重派生中構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序;3理解多重派生中虛擬基類的作用;7.2 實(shí)驗(yàn)內(nèi)容7.2.1程序閱讀1理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。class CBase1public:CBase1(int a):a(a)coutbase1 structure.endl;CBase1()coutbase1 destructure.endl;void print()couta=aend
37、l;protected:int a;class CBase2public:CBase2(int b):b(b)coutbase2 structure.endl;CBase2()coutbase2 destructure.endl;void print()coutb=bendl;protected:int b;class CDerive : public CBase1, public CBase2public:CDerive()coutderive structure.endl;CDerive()coutderive destructure.endl;void print()CBase1:pri
38、nt();CBase2:print();b1.print();b2.print();coutc=cendl;private:CBase1 b1;CBase2 b2;int c;void main()CDerive d;d.print();問(wèn)題一:改正以上程序中存在的錯(cuò)誤,并分析該程序的輸出結(jié)果。2理解下面的程序,并在VC+6.0下運(yùn)行查看結(jié)果,回答程序后面的問(wèn)題。#include iostream.hclass CBasepublic:CBase(int a):a(a)int a;class CDerive1 : public CBasepublic:CDerive1(int a):CBase
39、(a);class CDerive2 : public CBasepublic:CDerive2(int a):CBase(a);class CDerive : public CDerive1,public CDerive2public:CDerive(int a,int b):CDerive1(a),CDerive2(b);void main()CDerive d(1,2);coutd.aendl;問(wèn)題一:在不改變?cè)谐绦蛞鈭D的前提下,分別用三種方法改正以上程序,并使程序正確輸出。7.2.2 程序設(shè)計(jì)1建立普通的基類building,用來(lái)存儲(chǔ)一座樓房的層數(shù)、房間數(shù)以及它的總平方數(shù)。建立派生類
40、house,繼承building,并存儲(chǔ)臥室與浴室的數(shù)量,另外,建立派生類office,繼承building,并存儲(chǔ)滅火器與電話的數(shù)目。設(shè)計(jì)一主函數(shù)來(lái)測(cè)試以上類的用法。7.3思考題1按照下圖的類層次結(jié)構(gòu)編寫(xiě)程序,定義屬于score的對(duì)c1以及類teacher的對(duì)象t1,分別輸入個(gè)數(shù)據(jù)成員的值后再顯示出這些數(shù)據(jù)。實(shí)驗(yàn)八 C+程序、Windows程序和MFC程序8.1 實(shí)驗(yàn)?zāi)康?理解C+程序、Windows程序以及MFC程序之間的聯(lián)系與區(qū)別;2理解Windows程序的消息機(jī)制;3學(xué)會(huì)應(yīng)用VC+6.0的AppWizard創(chuàng)建基于MFC的Windows程序;4理解C+在MFC中的位置和作用。8.2 實(shí)
41、驗(yàn)內(nèi)容8.2.1 實(shí)驗(yàn)描述理解C+程序、Windows程序和MFC程序的聯(lián)系與區(qū)別C+是面向?qū)ο缶幊陶Z(yǔ)言中的一種,它具有封裝性、繼承性以及多態(tài)性三大特性,用C+語(yǔ)言寫(xiě)出來(lái)的程序需要借助編譯器才能生成可執(zhí)行的二進(jìn)制代碼,VC+6.0中具有能識(shí)別C+程序的編譯器,所以VC+6.0可以用來(lái)作為C+程序的開(kāi)發(fā)環(huán)境。MFC(Microsoft Foundation Class)是微軟公司開(kāi)發(fā)出來(lái)的一套用于Windows程序開(kāi)發(fā)的類庫(kù),MFC是建立在C+語(yǔ)言基礎(chǔ)之上的,它利用C+語(yǔ)言的三大特性對(duì)自己進(jìn)行了封裝,極大地方便了用戶在Windows上進(jìn)行程序開(kāi)發(fā),同時(shí)MFC也借助AppWizard使開(kāi)發(fā)者擺脫離
42、了那些每次都必寫(xiě)基本代碼,借助ClassWizard和消息映射使開(kāi)發(fā)者擺脫了定義消息處理時(shí)那種混亂和冗長(zhǎng)的代碼段。Windows程序與其他程序最大的不同之處在于使用消息機(jī)制,在Windows程序中所發(fā)生的一切都可以用消息表示,消息用于告訴操作系統(tǒng)所發(fā)生的事情。在MFC中遵循Windows的消息機(jī)制,MFC對(duì)消息的處理利用了消息映射的方法,所謂消息映射就是將消息與處理函數(shù)相聯(lián)系,即當(dāng)系統(tǒng)產(chǎn)生一條消息時(shí),它能找到處理該消息的函數(shù),該方法的基礎(chǔ)是宏定義實(shí)現(xiàn)。Windows系統(tǒng)是一個(gè)消息驅(qū)動(dòng)的OS,可以從以下幾個(gè)方面來(lái)理解Windows的消息機(jī)制:l 消息的組成:一個(gè)消息由一個(gè)消息名稱(UINT),和
43、兩個(gè)參數(shù)(WPARAM,LPARAM)。當(dāng)用戶進(jìn)行了輸入或是窗口的狀態(tài)發(fā)生改變時(shí)系統(tǒng)都會(huì)發(fā)送消息到某一個(gè)窗口。例如當(dāng)菜單選中之后會(huì)有WM_COMMAND消息發(fā)送,WPARAM的高字中(HIWORD(wParam))是命令的ID號(hào),對(duì)菜單來(lái)講就是菜單ID。當(dāng)然用戶也可以定義自己的消息名稱,也可以利用自定義消息來(lái)發(fā)送通知和傳送數(shù)據(jù)。l 誰(shuí)將收到消息:一個(gè)消息必須由一個(gè)窗口接收。在窗口的過(guò)程(WNDPROC)中可以對(duì)消息進(jìn)行分析,對(duì)自己感興趣的消息進(jìn)行處理。例如你希望對(duì)菜單選擇進(jìn)行處理那么你可以定義對(duì)WM_COMMAND進(jìn)行處理的代碼,如果希望在窗口中進(jìn)行圖形輸出就必須對(duì)WM_PAINT進(jìn)行處理。l
44、 未處理的消息到那里去了:Windows系統(tǒng)為窗口編寫(xiě)了默認(rèn)的窗口過(guò)程,這個(gè)窗口過(guò)程將負(fù)責(zé)處理那些你不處理消息。正因?yàn)橛辛诉@個(gè)默認(rèn)窗口過(guò)程我們才可以利用Windows的窗口進(jìn)行開(kāi)發(fā)而不必過(guò)多關(guān)注窗口各種消息的處理。例如窗口在被拖動(dòng)時(shí)會(huì)有很多消息發(fā)送,而我們都可以不用處理,而是讓系統(tǒng)自己去做默認(rèn)處理。l 窗口句柄:說(shuō)到消息就不能不說(shuō)窗口句柄,系統(tǒng)通過(guò)窗口句柄來(lái)在整個(gè)系統(tǒng)中唯一標(biāo)識(shí)一個(gè)窗口,發(fā)送一個(gè)消息時(shí)必須指定一個(gè)窗口句柄表明該消息由那個(gè)窗口接收。而每個(gè)窗口都會(huì)有自己的窗口過(guò)程,所以用戶的輸入就會(huì)被正確的處理。例如有兩個(gè)窗口共用一個(gè)窗口過(guò)程代碼,你在窗口一上按下鼠標(biāo)時(shí),消息就會(huì)通過(guò)窗口一的句柄被
45、發(fā)送到窗口過(guò)程代碼中。l Windows系統(tǒng)的消息機(jī)制:系統(tǒng)將會(huì)維護(hù)一個(gè)或多個(gè)消息隊(duì)列,所有產(chǎn)生的消息都回被放入或是插入隊(duì)列中。系統(tǒng)會(huì)在隊(duì)列中取出每一條消息,根據(jù)消息的接收句柄而將該消息發(fā)送給擁有該窗口的程序的消息循環(huán)。每一個(gè)運(yùn)行的程序都有自己的消息循環(huán),在循環(huán)中得到屬于自己的消息并根據(jù)接收窗口的句柄調(diào)用相應(yīng)的窗口過(guò)程。而在沒(méi)有消息時(shí)消息循環(huán)就將控制權(quán)交給系統(tǒng)所以Windows可以同時(shí)進(jìn)行多個(gè)任務(wù)。3本次實(shí)驗(yàn)將利用MFC的應(yīng)用程序向?qū)ВˋppWizard)生成一個(gè)支持MFC的Windows程序,同時(shí)在生成應(yīng)用程序的過(guò)程中理解不同設(shè)置對(duì)工程的影響。8.2.2 實(shí)驗(yàn)步驟1啟動(dòng)VC+6.0開(kāi)發(fā)環(huán)境,
46、選擇File|New菜單項(xiàng),彈出如圖11-1對(duì)話框。圖11-12選擇MFC AppWizardexe,在Location文本編輯框中輸入文件欲保存的目錄位置,或單擊省略號(hào)“.”按鈕選擇已有的目錄;同時(shí)在Project name下面的文本編輯框中輸入工程名稱,本次實(shí)驗(yàn)我們的工程名稱為MyTestProject,這時(shí)OK按鈕被激活。該對(duì)話框中還有以下選項(xiàng):(如圖11-1)l Create new workspace單選按鈕:表示創(chuàng)建一個(gè)新的工作區(qū),并將新項(xiàng)目添加到這個(gè)工作區(qū)。l Add current workspace單選按鈕:表示將項(xiàng)目添加到當(dāng)前工作區(qū),如果此時(shí)有多個(gè)工作區(qū),那么可以通過(guò)選中D
47、ependency of復(fù)選按鈕來(lái)選擇當(dāng)前項(xiàng)目需要添加到的工作區(qū)。2單擊OK按鈕,進(jìn)入如圖11-2所示的MFC AppWizard - Step 1對(duì)話框,該對(duì)話框主要有以下選項(xiàng):l What type of application would you like to current?你想要?jiǎng)?chuàng)建的應(yīng)用程序有以下單選項(xiàng)供選擇:n Single document:生成單文檔應(yīng)用程序。n Multiple document:生成多文檔應(yīng)用程序。n Dialog based:生成基于對(duì)話框的應(yīng)用程序(如計(jì)算器等)。l Document/View architecture support?是否需要支持文
48、檔/視圖結(jié)構(gòu),需要?jiǎng)t選中該選項(xiàng),如果不需要,則應(yīng)用程序中關(guān)于文件的打開(kāi)、關(guān)閉、保存及文檔/視圖的相互作用等功能需要程序員自己實(shí)現(xiàn)。l What language would you like your resources in?選擇生成何種語(yǔ)言界面的應(yīng)用程序,如果需要中文界面,則選擇如圖11-2中的“中文中國(guó)”,本例中選擇生成單文檔的應(yīng)用程序。圖11-23單擊Next按鈕進(jìn)入MFC AppWizard Step 2 of 6對(duì)話框,如圖11-3所示,該對(duì)話框用于支持?jǐn)?shù)據(jù)庫(kù)功能選項(xiàng)的選擇,本例中選擇None,下面分別為該對(duì)話框中的主要選項(xiàng)做一個(gè)簡(jiǎn)單介紹:l What database support would you like to incl
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年工程地質(zhì)三維建模的行業(yè)標(biāo)準(zhǔn)
- 2026年地質(zhì)三維建模在災(zāi)害預(yù)警中的應(yīng)用
- 2026上半年貴州事業(yè)單位聯(lián)考正安縣招聘65人筆試備考試題及答案解析
- 2026年購(gòu)房者行為模式的變化分析
- 2026年自清潔建筑材料的創(chuàng)新與應(yīng)用案例
- 2025年海南省行政管理崗筆試及答案
- 2025年孝南人事考試及答案
- 2026山東濰坊市公立三甲醫(yī)院病房護(hù)士招聘16人考試備考題庫(kù)及答案解析
- 2025年裸考教資筆試題目及答案
- 2025年招聘筆試往年真題及答案
- (人教A版)必修一高一數(shù)學(xué)上冊(cè)同步分層練習(xí)1.3 并集與交集第1課時(shí)(原卷版)
- 完整銀行貸款合同5篇
- 2025版地暖施工項(xiàng)目進(jìn)度管理與結(jié)算合同
- 2025年成都市中考化學(xué)試題卷(含答案解析)
- 2025年事業(yè)單位公開(kāi)招聘考試(D類)《職業(yè)能力傾向測(cè)驗(yàn)》新版真題卷(附詳細(xì)解析)
- 2025年尾礦綜合利用技術(shù)突破與生態(tài)修復(fù)技術(shù)協(xié)同創(chuàng)新研究
- 評(píng)定與追溯管理制度
- 武漢科技大學(xué)c語(yǔ)言期末試卷及答案
- T/CAS 612-2022碳中和管理體系要求
- 山東師范大學(xué)期末考試大學(xué)英語(yǔ)(本科)題庫(kù)含答案
- 鋰電行業(yè)異物管控
評(píng)論
0/150
提交評(píng)論