




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、面向?qū)ο蟪绦蛟O(shè)計C+|百度百科百度百科-面向?qū)ο竺嫦驅(qū)ο竺嫦驅(qū)ο笫且环N對現(xiàn)實世界理解和抽象的方法,面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計和軟件開發(fā)。|面向?qū)ο蟮默F(xiàn)代工業(yè)控制系面向?qū)ο蟮默F(xiàn)代工業(yè)控制系統(tǒng)實用設(shè)計技術(shù)統(tǒng)實用設(shè)計技術(shù)|面向?qū)ο蟮木幊虒崿F(xiàn)C+語言描述|C+語言基礎(chǔ)|面向過程和面向?qū)ο蟮木幊田L(fēng)格|封裝:類與抽象數(shù)據(jù)類型,信息隱蔽|對象的行為模型,消息傳遞:客戶/服務(wù)模式,事件驅(qū)動。|繼承|多態(tài)性|接口、重載|STL| COM組件、.NET|事件|C+程序包含如下成分:1)注釋,2)include文件,3)變量,4)語句,5)函數(shù),6)類|變量、指針和引用例:int a=1; int *ip
2、; ip=&a; int &b= a; int &c; /error!|函數(shù)1)傳值:函數(shù)獲得的是客戶參數(shù)的一個拷貝,不會修改客戶數(shù)據(jù)的原來值。2)傳地址:傳遞的是指向參數(shù)的指針(或地址),通過其指針可直接讀寫數(shù)據(jù)。3)傳引用:將變量或結(jié)構(gòu)的引用作為參數(shù)傳遞。|函數(shù)重載、默認(rèn)參數(shù) |動態(tài)內(nèi)存分配 new delete char *p1=new char ; char *p2=new char; p1= = p2 ?|異常處理1)throw expr;2) try.catch( type expr) |面向過程設(shè)計方法:自頂向下,按完成任務(wù)的思路,函數(shù)層層分解。程序:函數(shù),函數(shù)層層調(diào)用。|面向?qū)?/p>
3、象設(shè)計方法:模擬現(xiàn)實世界,自下而上組裝對象。主要步驟包括:1)識別相關(guān)對象 抽象 數(shù)據(jù)類型:識別對象時首先要考慮的是,可以用這個對象做什么。為類型選擇一個類名,如果難以命名,說明你還不知道你要做什么。將他們組織成為層次結(jié)構(gòu),例:世界由對象組成(寶馬車,冰箱,教師,數(shù)組),并以某種形式對這些對象分類(寶馬車和桑車歸于小汽車,冰箱電視機(jī)歸于家電類).不同領(lǐng)域有不同的分類.有各種方法分類,常常很難判斷出正確的抽象級別和合理的分類層次結(jié)構(gòu). 與現(xiàn)實世界結(jié)構(gòu)最接近的可能是最好的軟件的架構(gòu).2)定義類-面向?qū)ο笳Z言定義類型為類添加:成員函數(shù)(行為)、成員變量(屬性),不要忘記構(gòu)造析構(gòu)函數(shù)。成員變量也可以是
4、對象,組合其他對象.一個類型的定義應(yīng)該易于正確使用,難以錯誤使用,定義的依據(jù)是用它做什么。接口:一組聲明的函數(shù)原型3)實現(xiàn)類大多數(shù)情況下,實現(xiàn)的改動遠(yuǎn)比接口的改動來得頻繁。4)類的實例化(創(chuàng)建對象)類和對象不是一回事.5) 對象的請求 ,操縱對象。 (訪問其成員,調(diào)用其成員函數(shù))|類定義 - 封裝 屬性,包含的部件:成員變量行為,操作:成員函數(shù),方法class 類名:public 基類名 private:成員變量;成員函數(shù) /私有的,只有自身類成員函數(shù)才可以訪問 public:成員變量;成員函數(shù);/公有的 protected:成員變量;成員函數(shù);/保護(hù)的,類體系成員函數(shù)才可以訪問;|類對象類是
5、一個數(shù)據(jù)類型。對象:類的實例,在使用一個對象前必須先實例化. Point pt(0,0); Point *ppt=new Point(0,0);|關(guān)系籠統(tǒng)-具體關(guān)系 is a :類-對象整體-部分關(guān)系has a:成員變量是對象|數(shù)據(jù)成員類數(shù)據(jù)成員的聲明方式同變量聲明相同.但class First int memi = 0; / 錯誤double memd = 0.0; / 錯誤;|成員函數(shù)class Screen int m_x; int m_y;public:void move( int, int );void home() m_x=m_y= 0; /內(nèi)聯(lián)式。void Screen: mov
6、e( int x, int y ) /外聯(lián)式this-m_x=x; this-m_y=y;|成員訪問信息隱藏public,protected,private1)外部訪問對象的成員2)成員函數(shù)訪問本類的成員3)成員函數(shù)訪問基類的成員|設(shè)類有一個int m_x;成員變量,那么n個類的實例,內(nèi)存中就有n個m_x變量,m_x是this對象的成員變量.|n個類的每個實例,并不意味內(nèi)存有n個類的成員函數(shù)。被產(chǎn)生的代碼幾乎和我們已經(jīng)為C 庫寫的一樣高效。void Point:MoveTo(int x,int y) this-m_x =x; m_y=y; ; (在成員函數(shù)內(nèi))xyxyMoveTo()this-
7、x,this-y內(nèi)存數(shù)據(jù)區(qū)代碼區(qū)對象1對象2|客戶/服務(wù)模式服務(wù)器:類客戶:客戶通過創(chuàng)建對象,或通過函數(shù)參數(shù)傳遞過來的對象,訪問對象的變量或調(diào)用對象的函數(shù),操縱對象或獲得信息,得到服務(wù)。void Func( CObj obj,CObj *pobj) pobj-m_x=obj.m_x;/(客戶)|客戶服務(wù)器是相對的。|事件驅(qū)動:訂閱/連接服務(wù)器定義的事件,服務(wù)器調(diào)用客戶實現(xiàn)的函數(shù),響應(yīng)事件。例:typedef void callback(int param); /回調(diào)函數(shù)聲明void subMsg(char *subject,callBack* cbFunc);/訂閱 客戶端實現(xiàn)事件響應(yīng):voi
8、d myCallback(int param).訂閱服務(wù)器的事件subMsg(“時間”, myCallback); /記住函數(shù)指針服務(wù)器實現(xiàn)事件的激發(fā)void fire() /用記住的函數(shù)指針回調(diào) |繼承現(xiàn)實世界中對象的類別可能有多個層次.基類,派生類class Circle : public Point;1)類與類的關(guān)系:父子關(guān)系is a子類則通過附加屬性和方法來對父類特化或擴(kuò)展。2)子類繼承父類的所有成員。3)組合與繼承都是重要的重用方法,一般優(yōu)先使用對象組合PointCircleRect|派生類對象具有多種數(shù)據(jù)類型,但接口相同,形態(tài)不同(實現(xiàn)的代碼不同),可修飾為virtual, 通過對
9、象基類的指針或引用被調(diào)用執(zhí)行。多態(tài)性:成員函數(shù)函數(shù)的執(zhí)行是在運行時才動態(tài) 綁定到函數(shù)的入口地址|多態(tài)程序類的繼承體系。虛函數(shù):體系中關(guān)鍵字virtual修飾父子同名的成員函數(shù)。調(diào)用是通過基類對象引用或指針。設(shè)在Point為根的類層次體系中Draw是成員虛函數(shù). class Pointpublic:virtual void Draw();void OnDraw( Point *pObj) pObj-Draw( ); /調(diào)用層次體系中哪個類的成員函數(shù)?|對象,類|構(gòu)造函數(shù)|析構(gòu)函數(shù)|this指針|作用域分辨符:|靜態(tài)成員函數(shù),成員變量|初始化段|虛函數(shù),純虛函數(shù)|類型轉(zhuǎn)換|拷貝構(gòu)造函數(shù)|訪問限制|
10、重載、隱蔽、覆蓋|操作符重載|接口:抽象基類暴露的方法集合class I A virtual void f()=0;|通過繼承純虛類來實現(xiàn)接口。|采用接口的好處:多態(tài)Client不必知道其使用對象的具體所屬類。多個類可以實現(xiàn)相同接口,提高了(對象)組合的機(jī)率。 class B :public IA void f(); class C :public IA void f(); |表達(dá)式 X Y1) =X. operator ( Y ) 用類的成員函數(shù)重載例: string& DataRow:operator(int i)return cellsi;DataRow & DataTable:oper
11、ator(int i)return rowsi;DataRow row ; row 1=“aaaa”;DataTable tb;tb01=“aaaa”;2) =operator ( X , Y )用頂層函數(shù)重載( 類的 friend )例: istream & operator(istream&in,Complex &c) return inc.realc.image; ostream & operator(ostream&out,Complex &c) return outc.real“+”c;|表達(dá)式 X 1)=X . operator ( )2)或 =operator ( X)|模板函數(shù)
12、例:求兩數(shù)中較大的數(shù)。templateT maxV( T a, T b) return ab?a:b; |模板類例:templateclass Stack T *pEle;public:Stack() pEle=new Tn;moid main() Stack stack;|例:#include #include #include #include #include using namespace std;class Stock;bool oCmp(Stock &s1, Stock &s2) return s1.open s2.openvoid print(Stock &s).void mai
13、n() deque dStocks; map mStocks;while(cinsocv) dStocks.insert(stocks.end(),Stock(s,o,c,v); mStockss=new Stock(s,o,c,v);sort(dStocks.begin(), dStocks.end(),oCmp);for_each(dStockss.begin(), dStocks.end(),print);map:iterator it= mStocks.begin();while( it!= mStocks.end()map:value_type v=*it+;Stock *sk=v.
14、second;couto c“ “vendl;|istream ,ostream|ifstream, ofstream;|istringstream,ostringstream;|cin, cout|#include #include #include |例格式化:int a=10; double b=2000.24; char s=“王偉”;ostringstream sout;sout“姓名”s“ 工齡”a“ 工資”b;string str=sout.str(); coutstrxy;|例struct double salary; char name23; employee; ifstre
15、am ifile( payroll.dat“, ios_base:binary ); if(ifile )is.read( (char *) &employee, sizeof( employee ) ); cout employee.salary endl;ifile.close(); else cout ERROR endl; 1.要區(qū)別類的創(chuàng)建者和類的使用者(客戶程序員)2.當(dāng)我們創(chuàng)建一個類時,要盡可能用有意義的名字來命名類,可以用函數(shù)重載和缺省參數(shù)來創(chuàng)建一個清楚、易用的接口.3.數(shù)據(jù)隱藏允許我們(類的創(chuàng)建者)將來在不破壞用戶代碼的情況下隨心所欲地修改代碼。為
16、實現(xiàn)這一點,應(yīng)把對象的成員盡可能定義為private, 而只讓接口部分為p u b l i c,而且總是使用函數(shù)而不是數(shù)據(jù).4.使類盡可能地原子化。也就是每個類有一個單一、清楚的目。5.從設(shè)計的角度,尋找并區(qū)分那些變化和不變的成分。把它們封裝到不同類中.6.注意在繼承過程中的限制。最清晰的設(shè)計是向被繼承者加入新的功能,而如果在繼承過程刪除了原有功能,而不是加入新功能,那這個設(shè)計就值得懷疑了。7.大聲朗讀我們的類,確保它們是合理的。讀基類時用“is-a”,讀成員對象時用“has-a”。8.一個典型的基類僅僅是它的派生類的一個接口。當(dāng)我們創(chuàng)建一個基類時,缺省情況下讓成員函數(shù)都成為純虛函數(shù)。記住要給
17、析構(gòu)函數(shù)一個函數(shù)體,因為繼承關(guān)系中所有的析構(gòu)函數(shù)總是被調(diào)用。9.如果我們的類中包含指針,我們必須產(chǎn)生拷貝構(gòu)造函數(shù)、“=”運算符和析構(gòu)函數(shù),以使類運行正常。10.避免使用全局變量。盡可能把數(shù)據(jù)放在類中。全局函數(shù)存在的可能性要比全局變量大,雖然我們后來發(fā)現(xiàn)一個全局函數(shù)作為一個類的靜態(tài)成員更合適。11.當(dāng)寫一個函數(shù)時,我們的第一選擇是用c o n s t引用來傳遞參數(shù)。只要我們不需要修改正在被傳遞進(jìn)入的對象,這種方式是最好的。12.當(dāng)心臨時變量.13.在我們的構(gòu)造函數(shù)中只做一些最必要的事情,如果一個構(gòu)造函數(shù)無法避免失敗,最好的方法是拋出一個異常.14.使用異常層次,客戶代碼還是通過基類來捕獲這個異常.用值來拋出異常,用引用來捕獲異常。15. 先查看一個標(biāo)準(zhǔn)模板庫,然后查問創(chuàng)建特殊工具的開發(fā)包。當(dāng)我們熟悉了這些產(chǎn)品后,我們就可大大提高我們的生產(chǎn)效率。16.注意重載,一個函數(shù)不應(yīng)該用某一參數(shù)的值來決定執(zhí)行哪段代碼,如果遇到這種情況,應(yīng)該產(chǎn)生兩個或多個重載函數(shù)來代替。17.保證初始化出現(xiàn)在我們的代碼的所
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024可信計算保障人工智能安全
- (一模)萍鄉(xiāng)市2025年高三第一次模擬考試英語試卷(含答案解析)
- 橋體廣告施工方案
- 限高門架施工方案
- 全職用工合同范例
- 柔性鋼管知識培訓(xùn)課件
- 個人山頭出租合同范例
- 農(nóng)用田租地合同范例
- 書銷售居間合同范例
- 倉庫多功能利用的實踐計劃
- 2024年湖南省公務(wù)員考試《行測》真題及答案解析
- XX基于物聯(lián)網(wǎng)技術(shù)的智慧養(yǎng)老院建設(shè)方案
- 2024年執(zhí)業(yè)醫(yī)師考試-臨床執(zhí)業(yè)助理醫(yī)師考試近5年真題集錦(頻考類試題)帶答案
- 斷絕父子關(guān)系協(xié)議書
- 金屬材料課程設(shè)計作業(yè)
- 2023年古文中的化學(xué)知識歸納及相關(guān)練習(xí)題(含答案)
- 《基礎(chǔ)寫作》試卷及答案
- 2025年高考數(shù)學(xué)復(fù)習(xí)大題題型歸納:解三角形(原卷)
- 醫(yī)院軟式內(nèi)鏡清洗消毒技術(shù)規(guī)范
- 2024年中央空調(diào)市場占有率分析:中央空調(diào)國產(chǎn)品牌市場占有率上升至52.57%
- 2024年電力交易員(中級工)職業(yè)鑒定理論考試題庫-下(多選、判斷題)
評論
0/150
提交評論