2016新編2010年面向對象課程設計實習指導書v1[1][1]._第1頁
2016新編2010年面向對象課程設計實習指導書v1[1][1]._第2頁
2016新編2010年面向對象課程設計實習指導書v1[1][1]._第3頁
2016新編2010年面向對象課程設計實習指導書v1[1][1]._第4頁
2016新編2010年面向對象課程設計實習指導書v1[1][1]._第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、面向對象課程設計指導書中國地質大學(武漢)信息工程學院軟件工程系面向對象課程設計實習指導書使用班級:1110912 指導老師:葉亞琴 楊林2010-5-13目錄一、課程設計目的3二、課程設計要求3三、課程設計題目3預備任務3實習任務17實習任務29實習任務310實習任務411實習任務512實習任務613四、成績評定及評分標準14附件一、c+編碼規(guī)范151、文件組織152、命名規(guī)則173、注釋214、程序的版式245、可移植性376、提高程序的效率38附件二、課程設計報告格式39一、課程設計目的程序設計是一門實踐性非常強的教學環(huán)節(jié),學生在面向對象的程序設計課程結束后,由于課內實習時間的不足,很多

2、內容還來不及消化,特別是多態(tài)的概念。本課程設計的目的就是要通過時間相對集中的強化訓練,使學生對所學理論知識進行一次綜合性復習,進一步提高程序設計的能力。本課程設計的重點在于培養(yǎng)學生程序設計和軟件開發(fā)有關的綜合能力,具體包括:1、 培養(yǎng)學生對實際問題的分析能力; 2、 培養(yǎng)學生獨立編程、開發(fā)軟件的動手能力;3、 培養(yǎng)學生開放思維的創(chuàng)新能力;4、 培養(yǎng)學生熟練掌握vc+調試技能;5、 培養(yǎng)學生規(guī)范的編程習慣;6、 培養(yǎng)學生撰寫課程設計報告的能力。二、課程設計要求為了能更好地達到課程設計的目的,要求學生:1、每次上機前充分做好準備工作,查閱資料,預習相關內容,對課程設計內容進行方案的預設計,編制出源

3、程序代碼。2、充分利用上機時間完成源程序代碼的輸入、調試及優(yōu)化。3、程序代碼的編制應按照c+編碼規(guī)范的要求進行,具體可參考指導書中【附件一】“c+編碼規(guī)范”。并將規(guī)范應用到你的實際編程中去,形成良好的習慣。4、課程設計結束后,按照指導書中【附件二】“課程設計報告格式”的要求撰寫出課程設計報告(要求用a4紙打印,報告格式的電子文檔由指導教師提供)。預備任務任務1不需要撰寫報告,但要檢查程序;實習任務26要填寫報告。5、按題目要求獨立完成課程設計,不曠課、不遲到、不早退、遵守機房規(guī)定、愛護機房設備。三、課程設計題目預備任務1. 實習說明:該任務專門針對mfc基本框架還不熟悉的同學,若你能較快完成,

4、請直接從實習任務1開始。2. 實習內容:在visual studio2005中創(chuàng)建mfc基本框架,添加菜單,添加菜單處理函數,增加自己的類,復習調試技術。3. 實習目標(實習結束時請在達到的目標前打勾):(1) 初步掌握新建(new)基本mfc項目的方法;(2) 可以添加自定義菜單;(3) 可以添加菜單的消息處理函數;(4) 能夠使用afxmessagebox函數;(5) 能夠添加自定義的類文件;(6) 能夠掌握防止頭文件重復包含的方法;(7) 能夠編寫基本的類;(8) 初步熟悉mfc單文檔框架工程的文件組成;(9) 復習了調試技術。4. 上機指南:(1) 啟動visual studio200

5、5;(2) 創(chuàng)建一個新的項目(包括解決方案),可命名為try1(2.1)點擊“file(文件)”“new(新建)”“project(項目)”;(2.2)在“project types(項目類型)”中選“win32”;(2.3)在“templates(模版)”中選“mfc應用程序”;(2.4)在“name(名稱)”框中輸入 try1,然后點擊“ok”;(2.5)在“應用程序類型”中,選擇“單文檔”;(2.6)點擊“finish(完成)”。(3) 執(zhí)行編譯和連接,生成可執(zhí)行程序(4) 執(zhí)行程序,觀察運行結果:(4.1)點擊菜單“debugstart debugging”或按f5(4.2)點擊菜單“

6、debugstart without debugging”或按ctrlf5(5) 觀察項目結構(5.1)展開解決方案中的項目樹,觀察項目文件組成;(5.2)打開各文件,瀏覽文件中的基本內容;(5.3)切換到類視圖和資源視圖,進一步觀察各內容。(6) 增加自定義菜單(6.1)在項目的資源視圖中打開菜單資源;(6.2)增加一個頂層菜單“課程設計”;(6.3)在該頂層菜單下增加一個下拉菜單“msg”,觀察該菜單的屬性;(6.4)選中“msg”菜單,按右鍵,在彈出的快捷菜單中,選擇“添加事件處理程序”;(6.5)在彈出的對話框類列表中,選擇“ctry1view”類,確認;(6.6)在void ctry

7、1view:onmymenumsg()函數體中增加下面代碼:afxmessagebox(這是我做的菜單);運行程序,點擊菜單,觀察效果;(6.7)分析代碼,看菜單消息是如何與函數相對應的。(7) 增加自定義類以及相關文件(7.1)在“解決方案”視圖中,在頭文件文件夾上按右鍵,選擇添加新項,選擇頭文件類型,命名為point.h;(7.2)在新增加的類中,定義一個類,實現“點”類型,要求有x,y坐標(int類型),構造函數,有set和get函數存取坐標,類中的屬性必須是私有的,要求類、成員變量、成員函數命名要符合規(guī)范;頭文件必須能夠處理重復包含的情況,具體細節(jié)請參見附錄15頁。注: 下面是點類的一

8、個參考定義:(7.3)在源文件文件夾上按右鍵,選擇添加新項,選擇c+源文件類型,命名為point.cpp,在該文件中實現點類的函數等。注意在該cpp文件的第一行必須是#include stdafx.h(7.4) 添加文件后,解決方案看起來應該類似下圖效果(8) 在前面定義的菜單函數中,調用設計號的點類,用對話框顯示點坐標值。(注:afxmessagebox中可以是一般字符串,可以使用sprintf函數轉換坐標為字符串)。該函數的參考代碼如下所示:void ctry1view:onmymenumsg()point p;char coord30;sprintf(coord,x:%d,y:%d,p.

9、getx(),p.gety();afxmessagebox(coord);point就是要求編寫的類。5. 實習過程中,可以進行下面的嘗試:(1) 添加菜單后,改變菜單的id:(2) 在添加菜單消息映射函數的過程中,改變函數名為更加有意義的名字:(3) 在生成點對象時,使用缺省構造函數加set函數,使用帶參數的構造函數;(4) 生成點對象時,使用一般對象定義方式,也可以試驗new , delete的方式。(5) 復習以前的調試技術(設置斷點,單步追蹤,觀察變量值等)。實習任務11. 實習內容(反復練習下列內容,達到實習目標):n 鍛煉編寫基本類;2. 實習目標(實習結束時請在達到的目標前打勾)

10、:(1) 掌握public,private在類中的應用;(2) 掌握如何編寫帶參數的構造函數;(3) 掌握如何編寫與調用成員函數;(4) 掌握如何在項目中添加多個自定義類以及文件等;(5) 初步體會面向對象的編程特點。3. 上機指南:(1) 啟動visual studio2005;(2) 創(chuàng)建一個和“預備任務”同樣類型的新的項目(包括解決方案),可命名為tryn;(3) 熟悉代碼,復習編譯、調試等菜單和快捷鍵;(4) 編寫矩形類,要求使用上次實習的點類做為坐標的類型,需要有計算面積、計算周長,繪畫自己(draw)等成員函數。draw函數目前就是彈出一個對話框,顯示自己是矩形,并顯示出坐標;除了

11、缺省構造函數外,添加能夠直接定義矩形的帶參數的構造函數;提示:帶參數的構造函數可以把左上角坐標和右下角坐標做為參數,也可以左下角坐標配合長、寬做參數;矩形類必須有自己的私有成員變量保存坐標等;下面是矩形類的參考定義:其中 const point &p的用法鼓勵大家課下討論其目的,如果對該語法的使用感覺困難,可以用一般方法 “point p “ 的形式進行參數傳遞,但是前面一種要好一些。(5) 編寫三角形類,也要求有計算面積,計算周長,繪畫等成員函數以及特定的構造函數;注:可以考慮用三個定點坐標標識三角形。(6) 編寫圓形類,也要求有計算面積,計算周長,繪畫等成員函數以及特定的構造函數;注:可以

12、考慮用圓心、半徑表示圓。(7) 編寫正方形類,也要求有計算面積,計算周長,繪畫等成員函數以及特定的構造函數;注:可以考慮用一個定點加上寬度標識正方形。(8) 編寫圖形類(graph),每個圖形對象包含有一個圓,一個矩形,一個正方形,一個三角形,圖形類有得到總面積,得到總周長,繪畫所有圖形等功能;注:可以把圖形類考慮為一張畫,畫里面有一個圓,一個矩形,一個正方形,一個三角形。把這幾個形狀做為圖形類的私有成員變量,通過構造函數或者set函數設置進來,然后利用這些變量實現計算總面積、計算總周長、繪畫等功能。(9) 添加一個新菜單,在菜單處理函數中創(chuàng)建一個具體的圖形對象,調用該對象的幾個方法,彈出對話

13、框顯示結果:注:圖形對象以及里面的圓等形狀對象可以直接在程序中進行創(chuàng)建,設置坐標,不需要通過交互輸入值。(10) 編譯、運行程序,觀察結果;若有錯,則調試改正;實習任務21. 實習內容:(1) 改進實習1編寫的程序(重寫),利用純虛基類、繼承等重寫函數;(2) 改進圖形類,使之方便地處理多個形狀對象。2. 目標要求(實習結束時請在達到的目標前打勾):(1) 能夠理解并應用繼承的概念;(2) 能夠正確地撰寫虛函數;(3) 初步體會到多態(tài)帶來的方便。3. 上機指南:(1) 以實習1為基礎,針對矩形、三角形、正方形、圓形的特點,提取出一個基類(父類),編寫該類的方法;(2) 考慮一個合理的名字來命名

14、新的類;(3) 分析提取出的基類的方法是否應該設置為虛函數;(4) 矩形、三角形、正方形、圓形等類需要繼承基類,重寫相應的虛函數;注:這里要注意得到面積、得到周長等方法應該聲明為virtual函數。(5) 改寫圖形類,使該類中存儲一個形狀數組,數組數目可以在程序中用一個宏預定義,要求數組中存儲的對象類型為純虛基類的指針,重寫圖形類的幾個成員函數,與以前的做對比,分析變化情況;(6) 注意不要產生內存泄漏。 (7) 改變數組長度宏的大小,看圖形類計算總面積,計算總長度,繪畫等代碼是否需要改變?改變得是哪些?(8) 擴展要求(本要求不需要一定完成,完成的可以考慮適當加分):繼續(xù)改進上面的程序,把提

15、取出的基類實現為純虛基類。如果對純虛基類的概念不熟悉,鼓勵進行快速的自學,掌握這個概念。實習任務31. 實習內容:(1) 完善實習2的內容;(2) 在實習2的基礎上,更改draw函數,直接在屏幕上繪畫出對象的形狀。2. 目標要求(實習結束時請在達到的目標前打勾):(1) 鞏固實習2要求的目標;(2) 根據示例代碼,更改實習2中的代碼,實際繪畫出圖形:(3) 運用調試方法修改、檢查和完善程序。3. 上機指南:在屏幕上繪圖使用是mfc的一些類,這里不要求大家掌握很多,只要能夠用就可以了,下面是繪圖所需要的一些代碼參考。主要先找到ondraw函數,再根據下面的參考更改程序作出繪畫的效果。(注意試驗用

16、的坐標不要太大,否則圖形可能看不到)。void ctry1view:ondraw(cdc* pdc)ctry1doc* pdoc = getdocument();assert_valid(pdoc);if (!pdoc)return;/ 添加的畫線(100,100)-(200,200)pdc-moveto(100,100);pdc-lineto(200,200);/畫圓(300,300)和(400,400)確定了圓的外接正方形pdc-ellipse(300,300,400,400);上面是基本的繪畫函數,可以考慮利用這些函數實現畫矩形、畫三角形等功能。注:萬一實習3的要求實在達不到,也可以先把

17、實習2中的圖形在屏幕上進行繪畫,如果繪畫成功,也算完成本實習任務。實習任務41. 實習內容:(1) 完善實習3的功能;(2) 增加新的方法,體驗程序維護的工作。2. 目標要求(實習結束時請在達到的目標前打勾):(1) 實習3的任務確實已經完成;(2) 增加了新的方法;(3) 初步具有到了程序不斷改進的經驗;3. 上機指南:(1) 在實習3程序的基礎上,在每個形狀上添加一個函數isselected,參數為一個點坐標,如果點在形狀內部或者邊界上,返回真,否則返回假;(2) 在圖形對象中添加一個函數,傳入一個點坐標,把選中的形狀列表返回來;(3) 增加一個菜單,測試是否正確選擇了對象,彈出對話框顯示

18、選擇結果;(4) 第3步通過后,更改ondraw中的代碼,使程序只顯示被選中的形狀。(注:圖形中的形狀對象以及選擇點可以直接寫在程序中,不需要交互輸入)。實習任務51. 實習內容:(1) 體會多個對象之間的組合;(2) 編寫調試程序。2. 目標要求(實習結束時請在達到的目標前打勾):(1) 能夠編寫要求的多個類;(2) 初步體會到面向對象編程所表現出的整體與部分的概念;3. 上機指南:(1) 根據汽車的結構,構造一組類,簡單描述汽車;(2) 編寫發(fā)動機類(engine) 有啟動、停止、轉動等方法;(3) 編寫窗戶類(window),有搖上、搖下等方法;(4) 編寫車輪類(wheel),有調整方

19、向方法,帶角度參數;(5) 編寫車門類(door),有打開、關閉等方法,有窗戶屬性;(6) 編寫一個汽車類(car),由2扇門、4個車輪、一個發(fā)動機組成,撰寫一個駕駛函數,模擬開車場景,比如關上車門,搖上窗戶,發(fā)動發(fā)動機,調整方向等;(7) 要求用對話框顯示汽車狀態(tài)。實習任務61. 實習內容:(1) 熟練文件讀寫功能;(2) 編寫調試程序。2. 目標要求(實習結束時請在達到的目標前打勾):(1) 能夠熟練的讀寫文件;(2) 能夠主動將功能相對獨立的代碼封裝成函數;3. 上機指南:統計學生成績從文本文件中讀某班學生的學號、姓名和成績,進行分析給出平均分、最高分、最低分、最大分數差、標準差、各學生

20、的名次,把結果輸出到文件中。其中:最大分數差=最高分-最低分 注:該任務屬于擴展任務,不需要所有的同學完成。完成者可加分。四、成績評定及評分標準由指導教師根據課程設計任務完成情況、現場提問、觀看運行結果、評閱課程設計報告并參考學生平時表現等五方面給出課程設計成績。1、具體評分標準(見表5-1),成績等級分為:a(100分)、b(80分)、c(70分)、d(60分)、e(60分)五檔或折合成百分制給出成績。表5-1 vc+課程設計評分暫行標準項目評定內容評分標準(abcde)評分ad課堂檢查完成設計題目的數量與質量(x1)超額完成設計題目,達到較高的程序設計水平,具有一定的創(chuàng)新性、實用性。基本完

21、成課程設計要求提問檢查基礎理論掌握情況(x2)回答問題準確合理,概念表達清楚、有條理?;痉蠁栴}要求調試能力和軟件運行檢查(x3)具有較強的調試程序的能力,操作熟練,程序運行結果正確,界面友好,界面結構合理。程序運行結果基本符合要求課程設計報告課程設計報告情況檢查(x4)嚴格按照課程設計報告格式的要求,設計文檔規(guī)范;書寫清晰有條理,圖文并貌,能夠總結算法或設計的優(yōu)缺點,附有改進意見、設計體會或心得?;具_到課程設計報告的要求平時表現出勤記載(x5)嚴格遵守機房規(guī)定,不遲到不早退,不做與課程設計無關的事情基本能按要求進行課程設計總分總分(x1 +x2 +x3 +x4 +x5)/52、指導老師按

22、優(yōu)秀、良好、中等、及格、不及格五檔提交成績,成績等級如下:優(yōu) 秀:90-100;良 好:80-89;中 等:70-79;及 格:60-69;不及格:60,成績不合格者需要重修。附件一、c+編碼規(guī)范1、文件組織(1) 文件結構a、版權和版本的聲明版權和版本的聲明位于頭文件和定義文件的開頭(參見例1),主要內容有: 版權信息。 文件名稱,標識符,摘要。 當前版本號,作者/修改者,完成日期。 版本歷史信息。/copyright (c) 2002-2005, 中國地質大學/ all rights reserved./ / 文件名稱:輸入文件名,如filename.h/ 文件標識:見配置管理計劃書/ 摘

23、 要:簡要描述本文件的內容/ / 當前版本:1.1/ 作 者:輸入作者(或修改者)名字/ 完成日期:2002年7月20日/ 取代版本:1.0 / 原作者 :輸入原作者(或修改者)名字/ 完成日期:2002年5月10日例1 版權和版本的聲明b、頭文件的結構頭文件由三部分內容組成: 頭文件開頭處的版權和版本聲明(參見例1)。 預處理塊。 函數和類結構聲明等。假設定義文件的名稱為 box.h,定義文件的結構參見例2。/ 版權和版本聲明見例1,此處省略。#include “graphics.h”/ 引用頭文件/ 全局函數的聲明void function1();/ 類的聲明class cbox publ

24、ic: long getsize(); private: long m_lwidth; .;例2 c+/c定義文件的結構【規(guī)則1】防止頭文件內容被重復包含為了防止頭文件內容被重復包含,所有頭文件必須用ifndef/define/endif結構產生預處理塊。例如:對于文件mystring.h,其文件內容應按照如下方式編寫(例3):#ifndef mystring_h #define mystring_h #include / 引用標準庫的頭文件#include “myheader.h” / 引用非標準庫的頭文件void function1();/ 全局函數聲明class box / 類結構聲明;

25、 #endif例3 文件的內容定義【規(guī)則2】引用信息順序標準的頭文件要放在前面,而且按照字母順序排列。標準頭文件和自己的頭文件之間應該用空行分隔?!疽?guī)則3】用 #include 格式來引用標準庫的頭文件(編譯器將從標準庫目錄開始搜索)。【規(guī)則4】用 #include “filename.h” 格式來引用非標準庫的頭文件(編譯器將從用戶的工作目錄開始搜索)?!窘ㄗh1】頭文件中只存放“聲明”而不存放“定義”在c+語法中,類的成員函數可以在聲明的同時被定義,并且自動成為內聯函數,如果從提高性能角度考慮是可取。除此之外的選擇,建議將成員函數的定義與聲明分開,不論該函數體有多么小?!窘ㄗh2】不提倡使用全

26、局變量,盡量不要在頭文件中出現象extern int value 這類聲明。c、頭文件的作用 通過頭文件來調用庫功能。在很多場合,源代碼不便(或不準)向用戶公布,只要向用戶提供頭文件和二進制的庫即可。用戶只需要按照頭文件中的接口聲明來調用庫功能,而不必關心接口怎么實現的,編譯器會從庫中提取相應的代碼。 頭文件能加強類型安全檢查。如果某個接口被實現或被使用時,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這一簡單的規(guī)則能大大減輕程序員調試、改錯的負擔。(2)目錄結構如果一個軟件的頭文件數目比較多(如超過十個),通常應將頭文件和定義文件分別保存于不同的目錄,以便于維護。例如,可將頭文件保存于i

27、nclude目錄,將定義文件保存于source目錄(可以是多級目錄)。如果某些頭文件是私有的,它不會被用戶的程序直接引用,則沒有必要公開其“聲明”。為了加強信息隱藏,這些私有的頭文件可以和定義文件存放于同一個目錄。【規(guī)則5】統一目錄結構項目開始時,規(guī)定好項目相關文件在磁盤上的存儲目錄結構。2、命名規(guī)則比較著名的命名規(guī)則當推microsoft公司的“匈牙利”法,該命名規(guī)則的主要思想是“在變量和函數名中加入前綴以增進人們對程序的理解”。例如所有的字符變量均以ch為前綴,若是指針變量則追加前綴p,如果一個變量由ppch開頭,則表明它是指向字符指針的指針。在程序體中應基本遵循匈牙利命名規(guī)則。(1) 總

28、則【規(guī)則6】標識符應當直觀且可以拼讀,可望文知意,不必進行“解碼”。標識符應該采用英文單詞或其組合,便于記憶和閱讀,切忌使用漢語拼音來命名?!疽?guī)則7】標識符長度應當盡量符合“min-length & max-information”原則。單字符的名字也是有用的,常見如i,j,k,m,n,x,y,z等,它們通??捎米骱瘮祪鹊木植孔兞?。【規(guī)則8】程序中不要出現僅靠大小寫區(qū)分的相似的標識符。例如:int x, x;/ 變量x 與 x 容易混淆void foo(int x);/ 函數foo 與foo容易混淆void foo(float x);【規(guī)則9】命名規(guī)則盡量與所采用的操作系統或開發(fā)工具的風格保持

29、一致。例如windows應用程序的標識符通常采用“大小寫”混排的方式,如addchild。而unix應用程序的標識符通常采用“小寫加下劃線”的方式,如add_child。別把這兩類風格混在一起用?!窘ㄗh3】盡量避免名字中出現數字編號,如var1,var2等,除非邏輯上的確需要編號?!窘ㄗh4】盡量使用公認的無異義的縮寫,縮寫一般不超過4個字母。例如:html hypertext markup languageurl uniform resource locatorcmd command init initialize【規(guī)則10】程序中不要出現標識符完全相同的局部變量和全局變量,盡管兩者的作用域不

30、同而不會發(fā)生語法錯誤,但會使人誤解?!疽?guī)則11】變量的名字應當使用“名詞”或者“形容詞名詞”。例如: float value;float oldvalue;float newvalue;【規(guī)則12】函數的名字應當使用“動詞”或者“動詞名詞”(動賓詞組)。類的成員函數省掉表示對象本身的“名詞”。例如:drawbox(); / 全局函數 box-draw();/ 類的成員函數【規(guī)則13】用正確的反義詞組命名具有互斥意義的變量或相反動作的函數等。例如:intminvalue;intmaxvalue;intsetvalue();intgetvalue();(2) 文件【規(guī)則14】通用文件命名規(guī)則 類的

31、聲明文件(.h)和實現文件(.cpp):類名.h類名.cpp 常量定義文件:項目名稱縮寫(大寫)+_const.h例:di_const.h 全局變量、函數聲明文件:項目名稱縮寫(大寫)+_globaldef.h例:di_globaldef.h 錯誤代碼定義文件:項目名稱縮寫(大寫)+_errordef.h例:di_errordef.h(3) 變量【規(guī)則15】變量名由范圍前綴+類型前綴+限定詞組成?!疽?guī)則16】變量和參數用小寫字母開頭的單詞組合而成。例如:bool flag;int drawmode;【規(guī)則17】變量的范圍前綴 全局變量加上g_(表示global)例如:int g_howmany

32、people;/ 全局變量int g_howmuchmoney;/ 全局變量 靜態(tài)變量加上s_例如:void init()static int s_initvalue;/ 靜態(tài)變量 局部變量范圍前綴為空【規(guī)則18】變量的類型前綴類型名稱表示符號范例整型nm_ntotalnum長整型lg_lopendate無符號整型uumsgid無符號長整型dwdwcardno字符chchchar布爾量bm_bok浮點數fm_fprice雙精度浮dg_drate字符數組szm_szpath指針ppprogress字節(jié)指針pbm_pbsenddata無符號指針pvg_pvparam字符指針lpszlpszname

33、str整型指針lpnlpnsysdoomtype文件指針fpm_fpfile結構體ststmystruct【規(guī)則19】方法參數名使用有意義的參數命名,如果可能的話,使用和要賦值的字段一樣的名字。例如:void settopic (string strtopic) this.strtopic = strtopic; .【建議5】循環(huán)變量可以用i,j,k做循環(huán)變量,用p,q做位移變量。【規(guī)則20】常量名全用大寫,用下劃線分割單詞例如:const int max = 100;const int max_length = 100;(4) 自定義類型【規(guī)則21】類名必須由大寫字母開頭的單詞或縮寫組成,只

34、用英文字母,禁用數字、下劃線等符號?!疽?guī)則22】typedef定義的類型利用typedef創(chuàng)建類型名為以“s”加單詞或縮寫組成,只用英文字母?!疽?guī)則23】枚舉類型枚舉類型名以“e”加單詞或縮寫組成,只用英文字母。枚舉類型的成員遵循常量命名約定,使用大寫字母和下劃線,名稱要有含義?!疽?guī)則24】結構(struct)和聯合(union) 結構(struct)和聯合(union)名同類名。(5) 函數【規(guī)則25】用正確的反義詞組命名具有互斥意義的變量或相反動作的函數等?!疽?guī)則26】函數的名字應當使用“動詞”或者“動詞名詞”(動賓詞組)。【規(guī)則27】類方法名必須用一個小寫字母的動詞開頭,后面的單詞用大寫

35、字母。例如:getname(),sethtml()【建議6】方法名前綴根據需要使用get/set存取屬性值,is/has/should存取布爾值。推薦使用下列方法前綴,按下列組合配對使用:add/remove,create/destroy,old/new,insert/delete,increment/decrement,start/stop,begin/end,first/last,up/down,next/previous,min/max,open/close,show/hide3、注釋(1) 總則【規(guī)則28】程序可以有兩種注釋:代碼注釋(implementation comments)和

36、文檔注釋(documentation comments)。代碼注釋主要刪除注釋(注釋掉目前不需要的代碼)和說明注釋(對代碼進行說明),文檔注釋是指專門用來形成文檔用的注釋?!疽?guī)則29】注釋是why而不是what。程序中的注釋不可喧賓奪主,注釋的花樣要少?!疽?guī)則30】邊寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除?!疽?guī)則31】注釋的位置應與被描述的代碼相鄰,可以放在代碼的上方或右方,不可放在下方?!疽?guī)則32】當代碼比較長,特別是有多重嵌套時,應當在一些段落的結束處加注釋,便于閱讀?!疽?guī)則33】修正bug之后,要加上描述修改狀況的注釋。(2) 文檔注釋【

37、規(guī)則34】文檔注釋文檔注釋用/*/標識,它對代碼的使用說明進行描述,每一個文檔注釋被放進/*/分隔符,每一個類、接口、構造函數,方法和成員變量擁有一個注釋,這樣的注釋應該出現在相應的聲明前。 例如: /* * example類提供如下的功能 . */ class example 類和接口的文檔注釋(/*)的第一行不應該縮進,以后的文檔注釋每行都應有一個空格的縮進(給垂直排列的星號)。成員函數(包括構造函數),第一行文檔注釋前有一個tab縮進,后續(xù)的行有一個tab外加一個空格的縮進。對于那些不適于文檔注釋的類、接口、變量、方法的信息,用代碼注釋進行說明,而不應該在類的文檔注釋中。 文檔注釋不應該

38、放在方法或構造函數的定義體內。(3) 源程序文件【規(guī)則35】源程序文件文檔注釋每個源程序文件的開頭都需要文檔注釋(參見例1),主要內容有: 版權聲明:版權聲明內容為copyright beijing china tech international software, inc. all rights reserved.。 文件名稱:本文件的名稱。 開發(fā)者姓名:填寫最初編寫此代碼的人。 創(chuàng)建日期:本文件的創(chuàng)建日期。 功能目的:簡要描述本文件中代碼的功能。 修改歷史(修改日期、修改人、修改編號、修改內容)。其中修改歷史可以多次出現,任何對本文件的修改必須增加一條修改歷史。(4)類【規(guī)則36】類注釋

39、每個類的必須有文檔注釋,其中至少要包括:功能、版本、最后修改時間、作者、修改歷史(修改日期、修改人、修改編號、修改內容)等,其中修改歷史可以多次出現,任何對本類的修改必須增加一條修改歷史,此外可以根據需要添加其它相關信息或鏈接。類注釋必須在類的聲明之前。 例 例如:/* 類 string 封裝了有關字符串的操作,這些操作包括* 單個字符定位、串比較、查找、提取子串、大寫/小寫轉換等* * author lee boynton * author arthur van hoff * version 1.130, 02/09/01 */class string(5) 函數【規(guī)則37】函數注釋所有函數

40、(包括類自定義類型的成員函數)必須有文檔注釋。注釋在其定義之前,按如下方式書寫:/* * 判斷一字符串是否為數字 * * param snum 字符串 * return true=是數字 false=不是數字 */boolean isnumber(string snum) .【規(guī)則38】構造函數注釋要標明此函數為構造函數。如果有多個構造函數,用遞增的方式書寫,參數多的寫在后面,如有多組構造函數,每組分別用遞增的方式寫,并且每一個都要有詳細的注釋。(6) 變量【規(guī)則39】變量的注釋變量注釋出現在變量聲明或自定義數據類型成員聲明的前一行,用以描述對應變量的作用和含義,變量注釋一般占一行。下列變量必

41、須有注釋: 自定義類型的成員 全局變量 其它重要的局部變量注釋必須按如下方式書寫:/* 包計數器 */int ipackets;(7) 語句【建議7】代碼注釋風格代碼注釋用/*.*/和/標識。程序可以有四種風格的代碼注釋:塊注釋、單行注釋、后緣注釋(trailing)、行尾注釋(end-of-line)。塊注釋。塊注釋常用來提供文件、方法、數據結構、算法的說明。塊注釋可以被用在每個文件的開頭和每個方法的起始,它們也可以被用在其他地方,比如在方法內部等。塊注釋在函數或方法的內部應該和它們描述的代碼具有同樣的縮進格式。塊注釋之前應該有一個空行。單行注釋。短的注釋可以出現在單行,和它后面的代碼使用同

42、樣的縮進。單行注釋前應該有一個空行。后緣注釋(trailing)和行尾注釋(end-of-line)。非常短的注釋可以出現在和它說明的代碼的同一行中,但應該和被說明的代碼相隔足夠遠。如果在一個代碼塊中出現了多于一個的短注釋,它們應該有相同的縮進?!疽?guī)則40】語句塊結束注釋 函數定義的結束必須加如下內容的注釋: /end of 函數名。若程序文件中能夠明確指出函數結束的不需加此注釋。 對于包含代碼行較多的條件語句,每個條件處理語句塊的結束必須加如下內容的注釋:/end of 此語句塊的條件。 對于包含代碼行較多的循環(huán)語句,循環(huán)語句塊的結束必須如下內容的注釋:/end of 循環(huán)條件。4、程序的版

43、式(1) 空白符a、空行【規(guī)則41】在每個類聲明之后、每個函數定義結束之后都要加空行。【規(guī)則42】在一個函數體內,邏輯上密切相關的語句之間不加空行,其它地方應加空行分隔。 b、空格【規(guī)則43】在if、for、while等關鍵字之后應留一個空格再跟左括號(,以突出關鍵字。【規(guī)則44】函數名之后不要留空格,緊跟左括號(,以與關鍵字區(qū)別。【規(guī)則45】,、;向前緊跟,緊跟處不留空格?!疽?guī)則46】,之后要留空格,如function(x, y, z)。如果;不是一行的結束符號,其后要留空格,如for (initialization; condition; update)?!疽?guī)則47】賦值操作符、比較操作符

44、、算術操作符、邏輯操作符、位域操作符,如“=”、“+=”“=”、“=”、“+”、“*”、“%”、“&”、“|”、“”前后不加空格。c、對齊【規(guī)則50】相互匹配的和應獨占一行并且位于同一列,同時與引用它們的語句左對齊?!疽?guī)則51】 之內的代碼塊在新行右邊一個tab處左對齊。(2)表達式a、運算符的優(yōu)先級【建議8】建議對于除+,*等優(yōu)先級非常明顯的運算符之外,全部使用括號確定表達式的操作順序。b、復合表達式【規(guī)則52】不要有多用途的復合表達式。c、邏輯表達式u 布爾變量與零值比較【規(guī)則53】布爾變量與零值比較不可將布爾變量直接與true、false或者1、0進行比較。應寫為:bool bflag;

45、if (bflag) / 表示flag為真if (!bflag) / 表示flag為假其它的用法都屬于不良風格,例如:if (flag = true)if (flag = 1 )if (flag = false) if (flag = 0)u 整型變量與零值比較【規(guī)則54】應當將整型變量用“=”或“!=”直接與0比較。假設整型變量的名字為value,它與零值比較的標準if語句如下:if (value = 0) if (value != 0)不可模仿布爾變量的風格而寫成:if (value)/ 會讓人誤解 value是布爾變量if (!value) u 浮點變量與零值比較【規(guī)則55】不可將浮點變

46、量用“=”或“!=”與任何數字比較。千萬要留意,無論是float還是double類型的變量,都有精度限制。所以一定要避免將浮點變量用“=”或“!=”與數字比較,應該設法轉化成“=”或“=-epsinon) & (x=epsinon)其中epsinon是允許的誤差(即精度)。u 指針變量與零值比較【規(guī)則56】應當將指針變量用“=”或“!=”與null比較,而不應采用if(p)或者if(!p)的形式。指針變量的零值是“空”(記為null)。盡管null的值與0相同,但是兩者意義不同。假設指針變量的名字為p,它與零值比較的標準if語句如下:if (p = null)/ p與null顯式比較,強調p是

47、指針變量if (p != null)不要寫成if (p = 0) / 容易讓人誤解p是整型變量if (p != 0) 或者if (p)/ 容易讓人誤解p是布爾變量if (!p)(3)基本語句a、代碼行【規(guī)則57】一行代碼只做一件事情,如只定義一個重要變量,或只寫一條語句?!疽?guī)則58】if、for、while、do等語句自占一行,執(zhí)行語句不得在同一行上。不論執(zhí)行語句有多少都要加?!疽?guī)則59】盡可能在定義變量的同時初始化該變量(就近原則)?!窘ㄗh9】在使用之前才定義變量?!窘ㄗh10】不提倡使用全局變量不提倡使用全局變量,盡量不要在頭文件中出現象extern int value 這類聲明?!窘ㄗh11

48、】調試信息不要用cout到處打印調試信息,統一使用帶開關的調試類打印調試信息。b、長行拆分【規(guī)則60】代碼行最大長度為80個字符?!疽?guī)則61】超長的語句應該在一個逗號后,或者一個操作符前折行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮進,使排版整齊,語句可讀。c、修飾符的位置【規(guī)則62】應當將修飾符 * 和 緊靠變量名。(4)條件語句【建議12】程序中有時會遇到if/else/return的組合,建議將如下風格的程序:if (condition) return x; return y; 改寫為 if (condition) return x;elsereturn y;或者

49、改寫成更加簡練的 return (condition ? x : y);【規(guī)則63】switch語句中必須有default分支。例如:switch (i) case 1:;break;case 2:;break;default :break; 【規(guī)則64】每個case語句的結尾不要忘了加break,否則將導致多個分支重疊(除非有意使多個分支重疊)。(5)循環(huán)語句【規(guī)則65】在多重循環(huán)中,如果有可能,應當將最長的循環(huán)放在最內層,最短的循環(huán)放在最外層,以減少cpu跨切循環(huán)層的次數。如:下面例4(b)的效率比例4(a)的高。for (row=0; row100; row+)for ( col=0;

50、col5; col+ )sum = sum + arowcol;for (col=0; col5; col+ )for (row=0; row100; row+) sum = sum + arowcol;例4 (a) 低效率:長循環(huán)在最外層 例4 (b) 高效率: 長循環(huán)在最內層【規(guī)則66】如果循環(huán)體內存在邏輯判斷,并且循環(huán)次數很大,宜將邏輯判斷移到循環(huán)體的外面。如:例5(a)的程序比例5(b)多執(zhí)行了n-1次邏輯判斷。并且由于前者老要進行邏輯判斷,打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對循環(huán)進行優(yōu)化處理,降低了效率。如果n非常大,最好采用例5(b)的寫法,可以提高效率。如果n非常小,兩者效

51、率差別并不明顯,采用例5(a)的寫法比較好,因為程序更加簡潔。for (i=0; in; i+)if (condition) dosomething();else dootherthing();if (condition)for (i=0; in; i+) dosomething();else for (i=0; in; i+) dootherthing(); 例5(a) 效率低但程序簡潔 例5(b) 效率高但程序不簡潔【規(guī)則67】不可在for 循環(huán)體內修改循環(huán)變量,防止for 循環(huán)失去控制?!窘ㄗh13】建議for語句的循環(huán)控制變量的取值采用“半開半閉區(qū)間”寫法。如:例6(a)中x值屬于半開半閉區(qū)間“0 = x n”,起點到終點的間隔為n,循環(huán)次數為n。例6(b)中的x值屬于閉區(qū)間“0 = x = n-1”,起點到終點的間隔為n-1,循環(huán)次數為n。相比之下,例6(a)的寫法更加直觀,盡管兩者的功能是相同的。for (int x=0; xn; x+)for (int x=0; x=n-1; x+)例6(a) 循環(huán)變量屬于半開半閉區(qū)間 例6(b) 循環(huán)變量屬于閉區(qū)間(6)常量【規(guī)則68】靜態(tài)變量使用時使用類名:變量名的方法來調用?!疽?guī)則69】盡量使用含義直觀的常量來表示那些將在程序中多次出現的數字或字符串。【規(guī)則70】

溫馨提示

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

評論

0/150

提交評論