#中山大學09級C++實驗10教材_第1頁
#中山大學09級C++實驗10教材_第2頁
#中山大學09級C++實驗10教材_第3頁
#中山大學09級C++實驗10教材_第4頁
#中山大學09級C++實驗10教材_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C+面向?qū)ο蠹夹g(shù)課程實驗指導用書課程名稱:程序設計 / 31、目的與要求:通過上 機實 驗理解 C+程 序的 執(zhí)行過程,掌 握 C+語言 的語 法特征;熟練掌握在 Visual C+ 開發(fā)環(huán)境下獨立編寫和調(diào)試C+ 程序 ; 掌握面向?qū)ο蟪绦蚝头盒统绦蛟O計思想和技術(shù),建立起用面向?qū)ο笏季S 和泛型思維進行問題分析和程序設計的習慣;掌握用C+語言解決 實 際問題的方法,建立優(yōu)秀的面向?qū)ο缶幊毯头盒途幊田L格,為進行大型 程序設計和科研編程打下基礎。、學時分配6 個實驗共 36學時實驗名稱學時 分配實驗一、 C+程序設計基礎與開發(fā)環(huán)境4實驗二、類與對象6實驗三、運算 符重 載6實驗四、繼承機制、虛基類、

2、虛函數(shù)與運行時多態(tài)8實驗五、模板、 STL 與泛型編程8實驗六、異常處理、 C+ I/O 流4、實驗目的和實驗內(nèi)容實驗一、 C+程序設計基礎與開發(fā)環(huán)境實驗目的】1通過 實驗體 會 C+在面向 過程程序 設計方 面與 C 的異同2初步 了解 C+的程序設計 風格3掌握函數(shù)重載和命名空間4進一 步熟悉 Vi sual C+集成開發(fā) 環(huán)境實驗內(nèi)容】1編寫 一個完 整的面向 過程風格的 C+程序 ,滿足 以下條件 :1 三個 重載 函數(shù),分 別接收 兩個整 數(shù)、兩 個浮點 數(shù)和兩 個字 符 串做參數(shù) (引 用類型,實現(xiàn)兩個數(shù)互相交換。2 在主 函數(shù)中 輸入交換 前和輸 出交換 后的兩個 數(shù),實現(xiàn)兩數(shù)

3、值交換 。3 主函 數(shù)應給 出必要的 輸入提 示。2 有以下 name space 定 義,namespace myn space1 / 31 const in t SIZE = 100。int A SIZE。int mo de(in t , int 。mode 函數(shù)的功能是輸出數(shù)組中的眾數(shù),及其出現(xiàn)的次數(shù) ,其返回值 是眾數(shù)的個數(shù)。完成 myn space 的定義,并在 main 函數(shù)中寫出完整 程序,演 示函數(shù)的功能 (將 myn space:A 作為實 參傳給 mo de函 數(shù)。3分別寫 C 和 C+程序,將文本文件 old.txt 中的所有內(nèi)容拷貝到新文 件 new. tx t 中 。

4、4輸入下面的程序,用編譯器的單步調(diào)試功能觀察其輸出,說明為什么?如 果把注釋語句中的注釋符號“/”去掉,程序能運行嗎?試解釋原因。#include using name space std 。namespace alipint ai= 16, aj= 15, ak= 23。int aj= 0 。void ma in ip( /cout ai:ai endl。using name space al ip。+ ai 。cout ai:ai endl。/+aj 。+ :a j 。cout :aj:aj endl 。+ ali p:a j 。cout alip:aj: ali p:aj endl。co

5、ut ak: akendl 。int ak=97。cout ak: akendl 。+ ak 。cout ak: ak/ 31cout output startin gendl。 /coutbi: biendl。using blip :bi。+bi。cout bi:bi endl。cout bj:bj endl。 using blip :bj。+bj。cout bj:bj endl。int bk 。cout bk: bkendl 。/usin g blip :bk。 cout output sta rtin g 。 return 0 。實驗二、類與對象實驗目的】1學習類的定義和使用方法2學習對

6、象的聲明和使用3學習對象構(gòu)造中,默認構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、類型轉(zhuǎn)換構(gòu)造函數(shù)和普 通多參數(shù)構(gòu)造函數(shù)的定義和使用4類靜態(tài)成員的定義和使用5體會深拷貝和淺拷貝的區(qū)別6使用 Vis ual C+的 Debug 功能,觀 察程序 流程,觀察類 的構(gòu)造函 數(shù)、析 構(gòu)函數(shù)的執(zhí)行順序和過程7體會基于對象程序設計方法和面向過程程序設計方法的區(qū)別實驗內(nèi)容】1完成以下類定義:class serie sComp int n。 /n 大 于或等于 1seriesComp (in t n。int sum( 。int fib ( 。double tayl or(double x。/ 31。其中 sum( 計算 1+2+3

7、+ + n;fib(計算斐波納契(Fi bonacci數(shù)列前 n 項和;. ( 1)nn x n!2tayl or( 計 算 1 x x 1! 2!2定義一個類,確保該類實例化的對象數(shù)目最多只能有一個(提示,使用 static 數(shù)據(jù)成 員和成員 函數(shù)。3Josephus 問題: n 個人 圍坐在一 圈,現(xiàn)從指定 的第 s 個人 開始報數(shù) ,數(shù)到 第 m 個人出列, 然后從出 列的下 一個人 重新開始 報數(shù),數(shù)到第 m 個 人又出 列,如此重復,直到所有的人全部出列為止。定義一個鏈表類和 Josephus 類。編制應用程序,給出人數(shù) n,起始位置 s 和數(shù)人數(shù) m,解決 Josephus 問題

8、。仔細體會你的 方法與面向過程 的解決 方法的區(qū)別。4定義 一個名 為 Date 的 類,用 于輸入 并驗證日 期,類 中的數(shù) 據(jù)成員和 成員函 數(shù)應滿足下面的規(guī)則;在主函數(shù)中編寫相應代碼驗證這些規(guī)則是否正確地 實現(xiàn)了;并用 Debug 功能仔細體會程序的運行過程。1 日期 包括 年(year、月(month 、日(day ,均為整型數(shù)據(jù),以及一個布 爾數(shù)據(jù)成員 pass 用來判斷輸入日期是否正確。2 布爾類型 private 成員函數(shù) checkFo rmat(,有一個字符串引用形參,驗 證讀入的日期格式是否正確yyyy:mm: dd 格式)?3 void 類型 private 成員函數(shù) v

9、a lidate(,沒有形參。判斷輸入的日期是 否合法。4 默認 構(gòu)造函 數(shù),沒 有形參, 將 year, month,day 分別 初始化 為 2006, 1,1;在構(gòu)造函數(shù)中要調(diào)用 valid ate)。5 定義 拷貝構(gòu)造函數(shù)6 定義類型轉(zhuǎn)換構(gòu)造函數(shù),能從字符串轉(zhuǎn)換成 Date 對象。7 使用帶默認參數(shù)的構(gòu)造函數(shù),三個整形形參 in t y,int m= 2,in t d=29, 分別對 year,month,day 賦值;注意要調(diào)用 validate)驗證。8 void 類型 public 成員函數(shù) setD ate(,有一個字符串引用形參,負責設 置新日期,首先調(diào) 用 checkFo

10、rmat(判斷日 期數(shù)據(jù) 格式是否正確,如正 確,繼續(xù)調(diào)用 valid ate(驗證輸入日期9 void 類型 publi c 成員函數(shù) prin tD ata(,沒有形參,根據(jù) pass值決定是 否打印設置的日期,如果打印,要按照”yyyy 年 mm 月 dd 日”的格式。實驗三、運算符重載/ 31【實驗目的】1掌握常用運算符重載的定義方法2掌握運算符重載的兩種方式:成員函數(shù)和友元函數(shù)3體會 運算符 重載對構(gòu) 建 A DT 的 作用【實驗內(nèi)容】1參考 教材第 11 章 的例子。 實現(xiàn)數(shù) 學中的 復數(shù)類 Comp lex ,它能實現(xiàn) 普通 的 +、 -、* 、 /數(shù)學 運算, =、 +=、 -

11、=、 *= 、 /= 賦值運 算, 前 后序 的 自增 自 減,(三個運 算符。試 完 成類 定義, 使得類 vecto rConta iner 的對 象 V C 表 現(xiàn)出以下行為 :V Ci 。 / 打 印 V C 中 第 i 個 向 量 的 所 有 元 素 , i 為 整 數(shù) , 下 同VC-outp ut(。 /打印 VC 中某個 向量所 有元素及 其元素 和,該向 量的元素和在所有向量元素和中是最大的V C(。/把 VC 中的 向量按 照其元 素和大 小排序, 然后順 序輸出向量及其元素和V C(i 。/把 VC 中的向 量按照其 元素和 由小到 大排序, 然后輸 出第 i 個向量所有

12、元素及其元素和V C(i, j 。/輸出 第 i 個向 量的第 j 個元素 。思考以下問題:Ve ctor 類 和 vectorContai ner 類有 良好的“封裝 性”嗎?如果 vecto rContai ner 不是 Vector 的友 元,代碼應如何 改動? cla ss Ve cto rfloat v4 。/fri end class vecto rContain er。public:Vector(flo at ve for ( int i= 0。 ivi=vei 。/ 31Vector(for ( int i= 0。 ivi=0。Ve ctor( voi d outp ut(。c

13、lass vectorContain erVector* _v 。int _size。/public:vectorContain er(Vector *v e, int siz e_v = new Ve ctorsiz e。_size = siz e。for ( int i= 0。 i_vi =vei。vectorContain er (。vectorContain er( 。Vector& operator(in t idx。Vector* operato r-(。voi d operator( (。Vector& operator(in t i 。float& operator(int i

14、, int j 。 實驗四、繼承機制、虛基類、虛函數(shù)與運行時多態(tài) 實驗目的】1學習類的繼承關(guān)系,聲明派生類2熟悉不同繼承方式下派生類對基類成員的訪問限制3學習多繼承的原理,虛基類的用途及其使用方法4虛函數(shù)的功能,虛函數(shù)支持面向?qū)ο蠖鄳B(tài)機制的工作原理5學習純虛函數(shù)與抽象基類的定義以及其作用,理解抽象基類和具體類的區(qū) 別。6基類與派生類構(gòu)造函數(shù)和釋構(gòu)函數(shù)的調(diào)用順序。7理解基本的設計模式實驗內(nèi)容】/ 311 編 寫 一 個 基 類 , 聲 明 有 publ ic 、 prote cted、 pri vate 成 員 , 然 后 使 用 public 繼承 ,prote cted 繼 承,pri va

15、te 繼承 分別生 成派生 類,觀察 派生類 對基類不同類型成員的訪問,驗證以下繼承規(guī)則:1A publ ic me mb er is accessib le from anyw here wi thin a program.2A private me mber can be accessed onl y by the memb er functio ns and f ri ends of i ts cla ss.3A pro tected memb er behaves as a public me mb er to a deri ved cla ss, and behaves as a p

16、riva te memb er to th e rest of the program.2有類定義class basepublic:virtual voi d iam( cout 輸出 派生類 的名字。創(chuàng)建 這些類的 對象, 并分別 通過這些 對象調(diào) 用 i am( 。把 指 向 兩 個 繼 承 類 對 象 的 指 針 分 別 賦 值 給 base* 指 針 , 通 過 這 些 指 針 調(diào) 用 iam( 。3防真農(nóng)場,一個哺乳動物類如下所示:#include class M amma lpublic:M amma l(:itsAge(2,i tsWeight(5cout cout const

17、return itsAge。 voi d SetA ge(int age itsAge=age。int GetWe ig ht( const retu rn its We ight。 / 31void SetWe ight(int weight it sWeight=weight。void Move( const cout const cout const cout 狗屬 哺乳動 物,且它的屬 性有品 種之分在 哺乳類基 礎上 增加品種 數(shù)據(jù)成 員),叫聲區(qū)別于其它動物,輸出”Woof!”),還會搖尾巴 (增 加成 員函 數(shù),輸 出”Tail wagging”,乞討食 物(增加成 員函 數(shù),輸

18、 出” bagging for food”。2 驢、馬、豬也屬哺乳動物,其叫聲分別為:“Meow!”,”Win nie!”,” Oin k! ” 。3 騾既是驢,也是馬,叫聲為”mu le”。4 編 程分別使各個動物表現(xiàn)為不一樣的行為, 并觀察 基類與 派生類的構(gòu)造 函數(shù)與釋構(gòu)函數(shù)的調(diào)用順序。5 把 Mamma l 中的非 構(gòu)造、非釋構(gòu)成 員函數(shù) 改為虛函數(shù), 然后派生 不同的 動物類,編寫程序說明虛函數(shù)的作用 如果 M amal 中的非構(gòu)造、非釋構(gòu)成員函數(shù)中有純虛函數(shù),派生不同的動 物類、選課 select(等成員函數(shù);派生出軟件學院學生類 ssStu dent,管理學院學生類 msStud

19、ent;從 ssStu dent 和 msStudent派生出雙學位學生 ddStu dent。它 們都定 義了 reg(和 select(成員函 數(shù),編寫 程序體 驗虛基類、虛函 數(shù)的作 用。5*定義類,滿足以下基本需求:1 該類主 要功能是對數(shù)組 進行排 序;2)排序的算法有簡單選擇排序、冒泡排序等,可選;3)類設計盡量滿足“良好的可擴展性”要求,也就是類功能有良好的可擴 充性,比如排序算法還可以添加插入排序、快速排序等。6*某市某產(chǎn)鞋鄉(xiāng)鎮(zhèn)企業(yè),需要開發(fā)一套管理軟件,對企業(yè)的產(chǎn)鞋過程進行管 理。在該企業(yè)中,生產(chǎn)一種鞋需要一條生產(chǎn)線(比如皮鞋需要一種生產(chǎn)線, 運動鞋需要另一種。該企業(yè)隨著業(yè)務

20、的不斷發(fā)展,會不斷引進新生產(chǎn)線, 生產(chǎn)新品種的鞋,所以企業(yè)希望開發(fā)的軟件能夠不斷適應這個需求。你能/ 31用面向?qū)ο蟮某绦蛟O計思想,模擬該軟件的核心功能實現(xiàn)嗎?實驗五、模板、 STL 與泛型編程實驗目的】1掌握 C+中 的模板機制對泛型編程 思想的 支持 2掌握泛型函數(shù)、泛型類的定義及其使用方法3熟悉 STL Sequence 和 STL A ssociative容器類的使用方法4練習 STL 通用算 法、函數(shù)對象和 函數(shù)適 配器的使 用 實驗內(nèi)容】1用模板機制實現(xiàn)泛型函數(shù),重寫實驗一的第一題,功能要求不變。 2泛型化實驗三的 complex 類,使其能處理不同的數(shù)據(jù)類型的數(shù)據(jù)。 3下面 的源

21、代 碼是模擬 STL list 的實現(xiàn) ,試仔 細體會鏈表的 性質(zhì)和 Iterator的實現(xiàn)方法請補充完成未定義的成員函數(shù))。并編寫程序比較這個實現(xiàn)和 標準 STL list 實現(xiàn) 的異同。* * * * * /#include #include using name space std 。class li st public:struct listelem。 /f orward declarations class ite rator 。friend iterato r。lis t(:h(0, t(0 /construct the emp ty listlis t(siz e_t n_ele

22、ments, char c 。lis t(const lis t& x。lis t(iterato r b, iterator e。l is t( rel ease(。 ite rator begin(const retu rn h。 iterator end(const retu rn t。 vo id push_f ront( char c。vo id pop_front( 。char& front( return h - data。 char& back( return t - data。 bool emp ty( const return h = 0。 vo id rele ase(。

23、friend ostream& operato r。 struct listelem / list cell/ 31 char data。li ste lem* next, *p rev 。li ste lem( char c, li stel em* n, liste lem* p:d ata(c, next(n, prev(p 。/scoped with in class li stclass ite ratorpublic :iterato r(listelem* p = 0:ptr(p iterato r operator+(。iterato r operator-(。iterato

24、r operator+(in t 。iterato r operator-(i nt。li ste lem* operator-( retu rn ptr。 。char& operator*( retu rn ptr - data。 operato r l is t ele m*( return ptr。 /c onversion private:li ste lem* ptr。/c urrent listele m or 0。private:lis tele m* h, *t 。 /head and tail。list:l ist(siz e_t n_elements, char casse

25、r t(n_eleme nts 0。h = t = 0。for(size_t i = 0。 i push_front(c。list:l ist(const lis t& xlis t:i terato r r = x. begin ( 。h = t = 0。 /n eeded for empty l istwhi le (r != 0push_front(*r + 。void l ist:rele ase(wh ile (h != 0pop_front(。ostream& operato r/ 31 lis t:i terato r p = x. begi n(。 /gets x. hout

26、out *p ,。 /g ets a char&+p。 /advances iterator using nextcout n 。retu rn out 。void l ist:push_front(char clis telem* temp = new li stelem( c, h, 0。 if (h != 0 /was a nonemp ty list h - prev = te mp 。temp - next = h 。h = temp 。else /was an emp ty l isth = t = te mp。void l ist:pop_f ront( lis tele m*

27、temp = h。if (h!= 0 /wa sa nonemp ty listh=h- next 。dele tetemp 。else/was anemp ty l istcout emp ty list! asser t(ptr != 0 。ptr = ptr - next。retu rn *t his。list:i terator lis t:iterator:operator+(int asser t(ptr != 0 。ite rator temp = *t hi s。ptr = ptr - next。retu rn temp 。int ma in(/ 31list l1。l1.pu

28、sh_front(A 。l1.push_front(F 。l1.push_front(C 。l1. push_front( z 。l1.push_front(l 。cout l1。return 0 。4理解 教材給 出的 Sequence 容器成 員類型 ,Sequence 容器 成員函數(shù) 用法。 分別編 寫程序,演示 Sequence 容器 ve ctor、list、 deque 的構(gòu)造、 插入、 刪除、訪問、賦值、交換操作。5理解 教材給 出的 A ssociative 容器 成員類 型,Associative 容器成員 函數(shù)功 能。 分別編寫 程序,演示 Associative 容器 s

29、et、map、multiset、 mu ltimap 的構(gòu)造、插入、 刪除、 訪問、 賦值、 交換操作 。6Using a random numb er generator, generate 10, 000 integers between 0 and 9,999. Place them in a list container. Comp ute and print the median valu e. What was expected? Comp ute th e frequencies of each valu e。 in other words, how many 0s were g

30、enerate d, how ma ny 1s were generated, and so forth. Prin t the valu e with greatest frequency. Use a vector to store th e frequencies. Be noticed that yo u should use al gor i t hm, f unct i on obj ect and f unct i on adapt er.實驗六、異常處理、 C+ I/O 流實驗目的】1理解 C+語 言的異常拋出處理機制2學習異常處理的聲明和執(zhí)行過程3學習 C+中 的格式化 I/

31、O4掌握 C+文件 I/O 流實驗內(nèi)容】1編寫計算整數(shù)階乘的程序,用異常拋出處理機制進行輸入、溢出時異常的 處理。在主程序中設置不同條件,觀察程序的處理流程。2 Suppose yo u are given lin e-oriented data in a file formatted as follows:Austral ia5E56,7667230284,La ngler,Tys on,31.2147,0./ 31 2B97,7586701,Oneill,Zeke,553. 429,0. 56065 4D75,7907252710,Nic kerson,Ke ll y,761.612,0.

32、010276276 9F2,6882945012,Hartenbach,Neil, 47.9637,0.0006471644 A ustria480F,7187262472,Oneill,Dee,264.012,0. 013 1B65,4754732628,Haney, Ki m, 7.33843,0.8475 DA1,1954960784,Pascente,Le ster,56.5452,0.0007629529 3F18,1839715659,Elsea,Chelsy, 801. 901,0. 5 Belg iu mBDF,5993489554,Oneill ,Meredith,283.4

33、04,0.0038239127 5A C6,6612945602,Parisienne,Bi ff,557.74,0.0075254727 6AD,6477082,Pennington,Li zanne,31.0807,0. 0004193544 4D0E,7861652688,Sisca,Fr ancis,704.751,0.Bahama s 37D8,6837424208,Parisienne,Samson,396. 104,0. 0053445 5E98,6384069,Willis ,Pam,90.4257,0.059246 1462,1288616408,Stover,Hazal,

34、583.939,0. 1 5FF3,8028775718,Stroms tedt,Bunk,39.8712,0.000537974 1095,3737212,Stover,Denny, 3.05387,0.8883 7428,2019381883,Parisienne,Shane,363. 272,0.00490155The heading of each section is a region, and every line under that heading is a seller in that region. Each comma-separated field represents

35、 the data about each seller. The first field in a line is the SELLER_ID which unfortunately was written out in hexadecimal format. The second is the PHONE_NUMBER (notice that some are missing area codes. LAST_NAME and FIRST_NAME then follow. TOTAL_SALES is the second to the last column. The last col

36、umn is the decimal amount of the total sales that the seller represents for the company. You are to format the data on the terminal window so that an executive can easily interpret the trends. Sample output is given below.A ustralia*La stName* *Fi rstName* *ID* *P hone* *S ales* *P ercent* La ngler

37、Tys on 24150 766-723-0284 31.24 4. 21E-02Oneill Zeke 111 59 XXX-758-6701 553.43 7.47E-013有磁盤文件 stu dent.txt,文件記錄格式為:學號 姓 名 性別 出 生年月 生源地 高 考成績修改實驗五(3的鏈表結(jié)構(gòu),使其結(jié)點能存儲 student. txt 的記錄。并在相應成 員函數(shù) 里加入 異常拋出處理代 碼。用 student.txt 的 所有數(shù)據(jù)初始化 列表。 列表能實現(xiàn)按照高考程序排序,排序后的所有學生紀錄輸出到 student_sort. txt 中 。/ 31附錄 VC 程序調(diào)試 ( 本部分

38、錄自網(wǎng)上資料在開發(fā)程序的過程中,經(jīng)常需要查找程序中的錯誤,這就需要利用調(diào)試工 具來幫助你 進行程 序的調(diào) 試,當然 目前有 許多調(diào) 試工具, 而集成 在 VC 中 的調(diào)試 工具以其強 大的功 能,一 定使你愛 不釋手 。下面 我們先來 介紹 VC 中的調(diào) 試工具 的使用。VC 調(diào)試工具1 1 調(diào)試環(huán)境的建立在 VC 中 每 當 建 立 一 個 項 目 (Pr oj ect 時 , VC 都 會 自 動建 立 兩個 版 本 : Rel ease 版本, 和 Debug 版本, 正如 其字面 意思所 說的,Rel ease 版本是 當程序 完成后, 準備 發(fā)行時用 來編譯 的版本, 而 Debug

39、 版 本是用 在開發(fā) 過程中進 行調(diào)試 時所用的版本。DEBUG 版 本當中 ,包含 著 MI CROSOFT 格式的 調(diào)試信 息, 不 進行任 何 代碼 優(yōu)化,而在 RELEASE 版本 對可執(zhí) 行程序 的二進制 代碼進 行了優(yōu) 化,但是 其中不 包含任何的調(diào)試信息。在新建 立的項 目中, 你所看到 是 DEBUG 版本,若 要選擇 RELEASE 版 本,可 以 選 擇 菜 單 PROJ ECT 中 的 SETTI NG 命 令 , 這 時 屏 幕 上 面 彈 出 PROJECT SETTEI NG 對話框 ,在 SETTI NG FOR 下拉列表 中選擇 RELEASE,按 OK 退 出

40、, 如 圖 4. 1 。圖 4. 1在調(diào)試 程 序 的時候必 須使用 DEBUG 版本, 我們可以 在 Pr oj ect Set t i ng 對話框的 C/ C+頁 中設置 調(diào)試選 項。/ 31圖 4. 2各個選項的含意如下:Program Dat abase 表示產(chǎn)生一個存儲程序信息的數(shù)據(jù)文件(. PDB, 它 包含了類型信息和符號化的調(diào)試信息;Li ne Number s Onl y 表示程序經(jīng)過編譯和鏈接產(chǎn)生的. OBJ 或. EXE文 件僅僅包含全局和外部符號以及行號信息;C7 Compat i bl e 表示產(chǎn)生一個. OBJ 或. EXE 文件行號信息以及符號化 的調(diào)試信息;N

41、one 表示 不產(chǎn)生 任何調(diào) 試信息。12 調(diào)試的一般過程調(diào)試,說到底就是在程序的運行過程的某一階段觀測程序的狀態(tài),而在一般 情況下程序是連續(xù)運行的,所以我們必須使程序在某一地點停下來。所以我們 所做的第 一項工作就是設立斷點。其 次, 再運行程序, 當程序在設 立斷點處停下 來時,再利用各種工具觀察程序的狀態(tài)。程序在斷點停下來后,有時我們需要按 我們的要求控制程序的運行,以進一步觀測程序的流向,所以下面我們依次來 介紹斷點的設置,如何控制程序的運行以及各種觀察工具的利用。1 3 如何設置斷點在 VC 中,你 可以設置 多種類 型的斷 點,我們 可以根 據(jù)斷點 起作用的方式把 這些斷點分為三

42、類: 1、與位 置有關(guān) 的斷點;2、與 邏輯條 件有關(guān)的斷點 3、與 WI NDOWS 消息有 關(guān)的斷 點下面我 們分別 介紹這三 類斷點 。首先我們介紹與位置有關(guān)的斷點。/ 311、最簡單的是設置 一般位置斷點, 你只要 把光標移到你要 設斷點 的位置, 當然這一行必須包含一條有效語句的;然后按工具條上的 add/r emove br eakpoi nt 按鈕或按 快捷鍵 F9; 這時你將會在 屏幕上看 到在這 一行的 左邊出現(xiàn)一個紅 色的圓點表示這 二設 立了一個斷點。圖 4. 32、有的時候你可能并不需要程序每次運 行到這兒都停下來,而是在滿足一 定條件的情況下才停下來,這時你就需要設置

43、一種與位置有關(guān)的邏輯斷點。要 設置這種斷點我們只需要從 EDIT 菜單中選中 breakpoint 命令, 這時 Br e ak poi nt 對 話 框 將 會 出 現(xiàn) 在 屏 幕 上 。 選 中 Br eak poi nt 對 話 框 中 的LOCATI ON 標簽,使 LOCATION 頁 面彈出 ,如圖 4. 4圖 4. 4單擊 condi t i on 按鈕,彈出 Br eakpoi nt 對話 框,在 Expr essi on 編輯框中寫出你的 邏輯表 達式, 如 X=3 或 a+b25, 最后 按 OK 返回 。圖 4. 5 這種斷點主要是由其位置發(fā)生作用的,但也結(jié)合了邏輯條件,

44、使之更靈 活。3、有 時我 們需要 更深入 地調(diào)試 程序,我 們 需 要進入程 序 的匯 編代碼 ,因此 我們需要在 在匯編 代碼上 設立斷點 :要設 立這種 斷點我們 只需從 Vi ew 菜單中選 Debug wi ndow 命 令 ,圖 4. 6再選 Di sassembl y 子命令 ,這時 匯編窗 口將會出現(xiàn)在屏 幕上。圖 4. 7在 圖 4. 7 中 的 匯 編 窗 口 中 你 將 看 到 對 應 于 源 程 序 的 匯 編 代 碼 , 其 中 源 程 序 是用黑體字顯示,下面是且對應的匯編代碼。要設立斷點,我們只需將光標移 到你想設斷 點處然 后點擊 工具條上 的 I nser t

45、 / Remove Breakpoi nt s 按鈕,此 后你將會看到一個紅圓點出現(xiàn)在該匯編代碼的右邊。/ 31圖 4. 8上面所講的斷點主要是因為其位置發(fā)揮作用的,即當程序運行到設立斷點的 地方時程序?qū)O聛?。但有時我們設立只與邏輯條件有關(guān)的斷點,而與位置 無關(guān)。所以下面介紹一下與邏輯條件有關(guān)的斷點。圖 4. 11最后按 OK 返回。 其他幾種斷點的設置的方法都與之類似。我們一一加以說明。2)監(jiān)視表達式發(fā)生變化斷點:從 EDI T 菜單中選 中 br eakpoi nt 命令, 這時屏幕上將 會出現(xiàn)Br eakpoi nt 對話框 。選中 Breakpoi nt 對話框中的 DATA 標簽

46、,對應的頁面將會彈出 在 Expr essi on 編 輯框中寫出你 需要監(jiān)視 的表達式 最后按 OK 鍵返回。3)監(jiān)視數(shù)組發(fā)生變化的斷點:從 EDI T 菜單中選 中 br eakpoi nt 命令, 這時屏幕上將 會出現(xiàn)Br eakpoi nt 對話框 。選中 Breakpoi nt 對話框中的 DATA 標簽,對應的頁面將會彈出 在 Expr essi on 編 輯框中寫出你 需要監(jiān)視 數(shù)組名; 在 Number of El ement s 編 輯框輸 入你需要 監(jiān)視數(shù) 組元素的個 數(shù);/ 31 按 OK 鍵 返 回 。4)監(jiān)視由指針指向的數(shù)組發(fā)生變化的斷點:從 EDI T 菜單中選 中

47、 br eakpoi nt 命令, 這時在屏幕上 將會出現(xiàn)Breakpoint 對話框。選中 Br eakpoi nt 對話框 中的 DATA 標簽;在 Expr es si on 編 輯框中 輸入形 如* poi nt name, 其中* poi nt name 為指針變量名;在 Number of El ement s 編 輯框輸 入你需 要監(jiān)視數(shù) 組元素 的個 數(shù);按 OK 鍵 返 回 。文件名 ; 按 OK 鍵關(guān)閉 Advanced Br eakpoi nt 對 話框。按 OK 鍵 關(guān) 閉 Br eakpoi nt s 對話 框。 。/ 31在 VI EW 菜單 ,Debug wi n

48、dow 選 Var i abl es wi ndow。 變量窗口 將出現(xiàn) 在屏幕上。其中顯示著變量名及其對應的值。你將會看到在變量觀察窗口的下AUTO , LOCAL,THIS 選中不同的標簽,不同類型的變量 將會顯部有三個標簽: 示在該窗口中。圖 4. 16觀察窗口(WATCH WI NDOW:Wat ch wi ndow 子命令 。這時圖 4. 17在 VI EW 菜 單 , 選擇 Debug wi ndow 命 令 , 變量窗口將出現(xiàn)在屏幕上。/ 31在圖 4. 17 的 觀察窗 口中雙擊 Name 欄的某一空行, 輸入你要查看的 變量名 或表達式。圖 4. 18 回車后你將會看到對應的

49、值。觀察窗口可有多頁,分別對應于標簽 Wat ch1, Wat ch2, Wat ch3 等 等 。 假如 你 輸 入 的 表達 式 是 一 個 結(jié)構(gòu) 或 是 一 個 對 象 ,你可 以用鼠 標點取表 達式右 邊的形 如 + ,以 進一步 觀察其 中的成員 變量的 值 如 圖 4. 19 。圖 4. 19快速 查看變 量對話 框( qui ck wat ch;在快速查看變量對話框中你可以象利用觀察窗口一樣來查看變量或表達式的值。但我們還 可以利用它來該變運行過程中的變量,具體操作如下:(1) 在 Debug 菜 單,選擇 Qui ck Wat ch 命 令,這 時屏幕上將會出 現(xiàn) Qui ck

50、 Wat ch 對話 框;/ 31圖 4.20在 Expr essi on 編輯框 中輸入變量名, 按回車;圖 4. 213)在 Cur r ent Val ue 格子中將出現(xiàn)變量名及其當前對應的值如圖 4. 22:圖 4. 22 4)如要改變該變量的 值只需雙擊該變 量對應 的 Name 欄, 輸入你要 改變的 值;5)如要把該變量加入到觀察窗口中,點擊 Add wat ch 按鈕; 6)點擊 Cl ose 按 鈕返回 ;我們還可以直接查看內(nèi)存中的值1 ) 從 Vi ew 菜 單 中 選 取 Debug wi ndows 及 Memor y 子 命 令 。 Memor y/ 31Wi ndo

51、w 出 現(xiàn) ;圖 4. 232)在 Addr ess 編輯框中 輸入你 要查看 的內(nèi)存地 址,回 車。對 應內(nèi)存地 址中的 值將顯示在 Memor y wi ndow 的 窗口中。圖 4. 24在調(diào)試過程中,有時我們需要查看或改寄存器中的值。我們只需:1)從 Vi ew 菜單中選取 Debug wi ndow 及 Regi st ers 子選項。Regi st ers 窗口出現(xiàn)。在 Registers 窗口中,信息以 Register = Val ue 的形式顯示, 其中 Regi st er 代表寄 存器的名字,Val ue 代表寄存器中 的值。圖 4. 25 。TRACE( The v alueo f xis%d n ,x 。TRACE( x = %dand y =%dn , x ,y 。TRACE( x = %dand y =%xa n d z =%f n ,x,y,z 。要注意的是 TRACE 宏只對 Debug 版本的項目產(chǎn)生作用,在 Rel ea

溫馨提示

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

評論

0/150

提交評論