課件及板書面向對象實踐_第1頁
課件及板書面向對象實踐_第2頁
課件及板書面向對象實踐_第3頁
課件及板書面向對象實踐_第4頁
課件及板書面向對象實踐_第5頁
已閱讀5頁,還剩49頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

面向對象VS面向結構 多 28 類 容器 LIST鏈 VS.NET2015vc++編譯:將源代碼(xxx.cxxx.cpp)轉變成目VS.NET創建解決方案文件夾(虛擬文件夾),編譯:將源代碼(xxx.cxxx.cpp)轉變成目連接:源文件一起打包轉變成可執行文件Ghost版本系統不推薦使用.計算機操作Win10(C盤C本人:1天的時間ghostC盤(win10-隨便用吧,系統壞了ghost恢復系統(15分鐘cbasicPascal等語言面向對象程序設計吸取了結構化程序設計的面向對象程序設計將數據及對數據的操作放三國時期,吟道“喝酒唱歌,人生真樣張出來給一看感覺不爽修改為:生幾何。當大臣轉告工匠之時,工匠昏 要改,只需要改要改的字,此為可后來的印刷中重復使用,此為可復用此詩若要加字,只需要另刻字加入即可,從用戶的角度去搞清楚實際的工作完成方法從軟件開發方法,技術的角度分析軟件開發的從軟件開發的角度分析要使用用戶工作,軟件必須完成的功能模塊有哪些?不涉及具體如何實現需求規格說明書等大體的說,該軟件有哪些功能模塊,模塊的調用 概要設計文檔等詳細設計文檔等將詳細設計階段得出的文檔轉變成源代碼.可以選擇的實現語言:C語言/C++/C#/Java.程序編碼文檔由另外一個部門的系統分析師/軟件設計師進測試報告等運行方向2006面向對象分析的第一步是33 B.確定附加的系統約CD.定義類和對象服務=面向對象=類+繼承+對象+類是對具有相同屬性和服務的一個或一組對classStudent{定義一個“Studentprivate://private可省略不寫(位于第一個位置可省略charvoidChangeMark();//私有段一般不放服務(函數,動作) int char*GetName();charprivate:私有段數據或屬性,此privatechar*name; intmark;Studentstu;//private,proteced,public三段對象(object)是系統中用來描述客觀事物的一向對象方法學使用對象分解取代了傳統方法的功屬性:也稱狀態或數據,用來描述對象的服務:也稱操作、行為或方法等,用來描述對象的動態特征。某些面向對象程序設計語言封裝的一個重要原則,目的是使對象的定義與對象是其全部屬性和全部服務緊密結合而的數據操作的代碼都被封裝在黑盒子里面。構細節操作的算法。從外面看不見,更不可處于私有段(private)的屬性或行為是不向外公開的,只在類定義體中的函數體中,即使處于保護段(protected)的屬性或行為只對可直接但“對象名.保護屬性或行為”這種寫法過“對象名.公有屬性或行為”這種方式公有段主要是向外界提供一個私有段和保護段的一#include<iostream>usingnamespacestd; private://可以省略不寫doubleheight;doubleweight;doublemoney;(doublex,doubley,double構造函數,height=x;weight=y;money=}void{}void{ }是面向對象程序設計語言不同于其它語言的classclassclassE:privateA{//classB:publicclassC:publicclassD:protectedclassF:privateA,protectedB,C,publicD//{BAACBBC的直是它的直接基類外,A也是它的基類,但是是間接A,B,C,DCardelli和、Wegner4包含多態:在許多語言中都存在,最常見入了派生概念后用來表現基類和派生類的成員函過載多態:同一個名字在不同的上下文中強制多態:編譯程序通過語義操作,把操的要求。程序設計語言中基本類型的大多數操作進行強制多態的操作。如int+double,編譯系統一intdoubledouble+doubleint->double多態性不僅增加了面向對象軟件系統的靈活消息:就是向對象發出的服務請求,它包消息通信:也是面向對象方法學中的一個綁定是一個把過程調用和相應調用所需要執據接收對象的具體情況將請求的操作與實現的方可性用性高、可性好、擴展性強!在C語言中允許動態地分配空間及動態地釋放已分配的空間,它所使用的是函數malloc()和()。申請:int*p=(int釋放 malloc()相比,具有以下優越性:new既省事,又可以避免量分配的偶然性錯誤它自動返回正確的指針類型,不必對返回newnewdeletenew=new變量類型(初始化值int*s=newint*s=(int這里定義了一個整型變量(不知道此變量的名變量動態分配了空間,并將地址賦給*s;s=new這里定義了一個整型變量(不知道此變量的名字)200,s為指向該整型變量所在的*p=newint[10];等價于intnew10的數組,并用一個指針(p指針)指向此數組的首地址。deletedeletenew分配的。intint*s;s=newint(200);deletes;int*p=newstaticstatic來定義,是用來實現同一個類的不同對象之classclasscounter{staticintcount;//intobjnum;voidstaticvoidprint()//{}countercounterstatic時,作為靜態靜態成員函數的對象名.靜態成員函數(“.”并不表示所屬類名::靜態成員函數(既是所屬關系,又是調用關系3.靜態成員函數不能像一般的成員函數那樣隨意地對象中的非靜態的數據內容一般情況下,靜態的成員函數里面只靜態的成員變#include<iostream>#include<string>usingnamespacestd;classMyString{staticinttotalLength;intlength;char*contents;MyString(char{this->length=strlen(s);//contents=s;contents=newchar[length+1];}void{}int{return}staticintSetTotalLength(MyString{totalLength+=obj.GetLength();returntotalLength;}{delete}intMyString::totalLength0;//此行能否不要voidmain(){char*s="thefirstobject";MyStringobj1("thefirstobject");MyStringobj2("thesecondobject");}this:對象自身(c++中稱為this),是面向對對象都有屬于自己的對象自身值。classclassclassy:privateyx類的派生類,xy(此處為私說基類的所有公有成員和保護段成員只能成為私有派生類的私有成員(private),這些私有成員只能被派生類的成員函數而派生類的使用者無#include<iostream>usingnamespacestd;classx{inta;x(inty){ay;}//構造函數初始化intgetPub(){returna;}int returna;classy:x{私有繼承,classy:privatexintb;y(inty):x(y){b=y;}//構造函數定義,綴上基類的構int{b=getPub()+10;//getPub()是基類提供 b=return}void{{xycout<<x1.getPub()<<endl;//y1.getPub }問題:y1x1public成員和保護段成員變成為公有派生類的公有成員#include<iostream>using#include<iostream>usingnamespacestd;classx{inta;x(intx) {a=x;}//構造函數初始化intgetPub(){returna;}int returna;classy:publicx{intb;y(inty):x(y){b=y;}intmake(){b=getPub()+10;b=getPro()+20;returnb;}void{xy}問題: //正確嗎cout<<y1.getPro()<<endl;//y是xgetPub中是保護段成員,所以派生類對象y1能直接getPub(),但不能直接getPro()。#include<iostream>usingnamespacestd;classx{inta;x(intx) {#include<iostream>usingnamespacestd;classx{inta;x(intx) {ax;}//構造函數初始化intgetPub(){returna;}int returna;classy:protectedx{intb;y(inty):x(y){b=y;}//構造函數定義,綴上基類的構int{b=getPub()+10;b=getPro()+20;returnb;}}void{xy}問題:cout<<y1.getPub()<<endl;//正確嗎?cout<<y1.getPro()<<endl;//由于y是xgetPub()20063O、PQO中定義了一classP:protectedO{…};classQ:publicO{…};F1的描述中正確的是(34)F2(35)F3的描述中正確的是(36)。A.F1只有在類o內才能方法只有在類P內才能方法只有在類Q內才能方法A.類O、P和Q的對象都可以方法類P和Q的對象都可以方法類o和Q的對象都可以方法只有在類P內才能方法A.類0、P和Q的對象都可以方法類o、p和Q的對象都不可以方法類0和Q的對象都可以方法類P和Q的對象都可以方法F3#include<iostream>using#include<iostream>usingnamespacestd;classNumber{inti;char*s1;intMax(inta){returna>i?a:i;}char*Max(char*c){return}Number(intx,char this->s1=y;void{Numbernum(10,"}上例中的多態通過函數重載來實現,重載(譯時的多態性通過重載來實現)了兩個函數,均為虛函數的作用(看下面的例子#include<iostream>usingnamespacestd;classFather{void{}classSon1:publicFather{voidWho()//自己定義-{}classSon2:public{voidWho()//自己定義-{}}void{Father*p;Son1obj1;Son2p=&obj1;//基類指針指向派生類對象obj1p=&obj2;//基類指針指向派生類對象obj2p->Who();}但實際輸出結果基類基類不滿足編程者意愿基類不滿足編程者意愿通過指針引起的普通成員函數調用,僅僅與指針的類型有關,而與此指針指向什么對象無不管指針p當前指向哪個對象(是基類對象還是派生類對象),p->Who()調用的都是基類中定Who()函數版本。通過子類對象顯示調用:obj1.Who強制轉換基類指針:((Sun1*)p)-把who()函數為虛函數或純虛函數。classbase{virtualvoid//virtualvoid僅僅返回類型不同,其余均相同,系統會函數原型不同,僅函數名相同,系統會將(方法virtual=0,我們2004●重置的基本思想是通過(48)機制的支持,(48)A.靜態綁定B.對象C.類型匹配D如果類之間頻繁共享同一函數或數據,則C++中的為封裝隱藏這堵不透明的墻當然使元會使數據封裝性受到削弱,程序可性變差因此一定要慎重使用只要將外界的某個對象說明為某一個類的友元那么這個外界對象就可以這個類對象中的為的外界對象既可以是另一個類的函數都成為函數。包含在其私有成員可被作為的外界對象的類定義中,也就是將friend關鍵字放在函數名或類名的前面此可以放在公有部#include<iostream>using#include<iostream>usingnamespacestd;classPoint{intx,y;Point(intx,intfriendvoid在這個例子中,在這個例子中,voidPrint()Point,Point::Point(intx,int{this->x=x;this->y=}voidPrint(Point cout<<point1.x<<"}void{Point//cout<<point1.xpoint1.y;行不行?}它可以Point類對象的私有成員x,y。 #include<iostream>using#include<iostream>usingnamespacestd;classPoint{intx,y;Point(intx,intfriendclassFriendOfPoint;friendvoidPrint(Pointp);classvoidPrint(Point{ }Point::Point(intx,int{Point::x=x;//可以換成this->x=x; Point::y=y;//可以換成this->y= }voidPrint(Point{ }void{Pointpoint1(5,6);FriendOfPointfriOfPoint;}以上例子中,FriendOfPointPointFriendOfPoint類的所有對象都可以PointPrint不屬于任何一Point的函數,所以它也可以直接Point類對象point1的私有成員。類屬是程序設計語言中普遍注重的一種參數常強,它是無約束類屬機制和約束類屬機制的集模板格式說明體temte是一個模板的關鍵字,它表示正在一個模板。模板參數表是由若干個模板參數組成的,每個模板參數均是由類型參數和參數說明兩部分class說明體是指模板定義體,或為函數模板的intmax(intintmax(intx,int{return}floatmax(floatx,float{return} x,{return}char*max(char*x,char{return}板的形式可以避免這些相同信息的重復。定義如te<classTmax(Tx,T{return}其中<classT>classTT預定義類型、用戶自定義類型。這樣定義的max代表的是一類函數,所以是函數模板。如果這個maxT(int等TT#include<iostream>using#include<iostream>usingnamespacestd;temte<classT>TGetMax(Tx,T{return}void{intfloatx1=50.34f,x2=56.34f;doubley1=673.36,y2=465.972;cout<<"themaxofi,jis:"<<GetMax(i,j)<<endl;cout<<"thecout<<"themaxofi,jis:"<<GetMax(i,j)<<endl;cout<<"themaxofx1,x2is:"<<GetMax(x1,x2)<<endl;cout<<"themaxofy1,y2is:"<<GetMax(y1,}2004(1)機制。的是這些類的成員特征中與(2)變元來表示與(3)A.包含多態B.參數多態C.過載多態D.強制多態A.具體對象無關B.具體類型無關C.具體對象相關D.具體類型相關(3)A.具體對象無關B.具體類型無關C.具體對象相關D.具體類型相關它們都沒有返回值說明,定義它們的時候不需函數返回值類型。C++函數一樣,構造函數可以用usingnamespacestd;classPoint{intx,y;Point(intvx,intvy);//帶參數的構造函數voidOffSet(intax,intay);Point::Point(intvx,int{y=}voidPoint::OffSet(intax,int{}void{Pointpt1(10,20);}usingnamespacestd;classSet{int intSet(inti);//Set::Set(int{size=i;}void{Sets1(64);Sets2(16);Sets3(8);Sets4;}s1sizes2size816小;s4時,并沒有給構造函數傳遞參數。因為在i16,構造函數就使函數中缺省參數并不只限于含有單個參數的usingnamespacestd;classPoint{intx,y;Point(intvy,int{}void{Pointp1;//錯誤Pointp2(10);Pointp3(10,20);}p1,p2,p3x,y取得不同的值。p1,p2p2x取值為10y0。p3yx10y所有取缺省值的參數必須出現在不取缺省參數的Point(intPoint(intx,inty=0);//Point(intx=0,inty);//usingnamespacestd;classx{inta,b;x(intc,int{//a}void{ }void{x}}usingnamespacestd;classA{virtualvoid{}classB:publicA{void{}void{A*p=newB();A*q=newB;A*r=A*o=newA();A*w=newA;A*z=Aa=Ab;}基類類型指針可以指向任何派生類對象ok#includevectorstd命名域的,因此需要通過命名usingstd::vector;vector<int>或者連在一起,使用全名:std::vector<int>建議使用全局名域方式:using (beg,end)cnelem的c。vInts.at(idx)idx所指的數據,如idxout_of_range。vInts.back()傳回最后一個數 查這個數據是否vInts.begin()傳回迭代器中的第一個數據vInts.capacity()返回容器中單元個數vInts.clear()vInts.empty()vInts.end()指向迭代器中的最后一個數據vInts.erase(pos)pos 刪除[beg,end)區間的vInts.front()vInts.get_allocator使用構造函數返回一個vInts.inse

溫馨提示

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

評論

0/150

提交評論