版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、面向?qū)ο筚Y料1面向?qū)ο筚Y料2授課教師:郝應(yīng)光郵件地址:面向?qū)ο筚Y料3l本課程的成績由期末考試和平時作業(yè)2部分構(gòu)成l平時成績由:期末大作業(yè)+平時隨堂作業(yè)構(gòu)成l具體比例待定面向?qū)ο筚Y料4l面向?qū)ο蠹夹g(shù)lC+語法概要(6)lMFC框架基礎(chǔ)詳解(15)lMFC文檔/視圖結(jié)構(gòu)詳解(9)l幾個應(yīng)用程序開發(fā)實例(6)lVisual C+應(yīng)用程序設(shè)計(12)多線程程序設(shè)計(3)TCP/IP網(wǎng)絡(luò)程序設(shè)計(3)動態(tài)連接庫程序設(shè)計(3)數(shù)據(jù)庫程序設(shè)計(3)面向?qū)ο筚Y料5l面向?qū)ο蟾拍蠲嫦驅(qū)ο蟾拍頻UMLUML面向?qū)ο筚Y料6類和對象靜態(tài)數(shù)據(jù)成員及成員函數(shù)對象與指針操作符重載和友員繼承多態(tài)性面向?qū)ο筚Y料7Visual
2、C+集成開發(fā)環(huán)境簡介Windows操作系統(tǒng)下的應(yīng)用程序(SDK、MFC)用Appwizard開發(fā)一個MFC程序事件處理、映射模式及滾動視圖GDI、顏色及字體對話框及控件ActiveX及IE公用控件位圖面向?qū)ο筚Y料8菜單、鍵盤及命令處理工具欄及狀態(tài)欄文檔和視圖分離SDI及MDI文檔的讀寫打印及打印予覽拆分窗口及多視圖面向?qū)ο筚Y料9多線程程序設(shè)計數(shù)據(jù)庫程序設(shè)計動態(tài)連接庫程序設(shè)計TCP/IP網(wǎng)絡(luò)程序設(shè)計面向?qū)ο筚Y料10l面向?qū)ο蠼Ec設(shè)計,面向?qū)ο蠼Ec設(shè)計,RumbaughRumbaugh,電力出版社,電力出版社l面向?qū)ο蠓治雠c設(shè)計,面向?qū)ο蠓治雠c設(shè)計,Grady BoochGrady Booch
3、,機(jī)械工業(yè)出版,機(jī)械工業(yè)出版社社lThinking in C+Thinking in C+,Bruce EckelBruce EckellC+ PrimerC+ Primer,Stanley B LippmanStanley B Lippman,中國電力出版社,中國電力出版社lC+C+語言及其程序設(shè)計教程,張國峰,電子工業(yè)出語言及其程序設(shè)計教程,張國峰,電子工業(yè)出版社版社l深入淺出深入淺出MFCMFC,2Ed2Ed,侯俊杰(侯杰),松崗。,侯俊杰(侯杰),松崗。lVisual C+ Visual C+ 技術(shù)內(nèi)幕,技術(shù)內(nèi)幕,MicrosoftMicrosoft,北京希望電子出,北京希望電子出版社
4、版社面向?qū)ο筚Y料11l(microsoft)l(世界最大開源代碼庫)面向?qū)ο筚Y料12面向?qū)ο筚Y料軟件開發(fā)軟件開發(fā)的過程就是程序員對客觀世界問題域形式化的過程面向?qū)ο筚Y料計算機(jī)開發(fā)語言v機(jī)器語言、匯編語言、高級語言,高級語言可能有幾千種v計算機(jī)語言都是某種程度的形式語言面向?qū)ο筚Y料v計算機(jī)高級語言的歷史由美國科學(xué)家巴科斯設(shè)計,1956年在IBM計算機(jī)上實現(xiàn)的FORTRAN。70年代以來的PASCAL80年代,C語言80年代后期,C+90年代以來,語言要OO而且Visual,更要Web,Java快速推廣。面向?qū)ο筚Y料vPO方法:現(xiàn)實世界 流程圖(變量,函數(shù)) PO語言 執(zhí)行求解 vOO方法:現(xiàn)實世
5、界 類圖(對象,方法) OO語言 執(zhí)行求解OO作為一種思想及編程語言,為軟件開發(fā)的整個過程:分析、設(shè)計到coding,提供了一個完整解決方案。從PO到OO面向?qū)ο筚Y料17問題域 (Domain)以問題域的系統(tǒng)流程為中心分析Sub1Sub2Subn.各子流程實現(xiàn)-函數(shù)化Func1Func2Funcn.根據(jù)系統(tǒng)的流程組建軟件,通過函數(shù)的調(diào)用實現(xiàn)面向?qū)ο筚Y料18問題域 (Domain)以問題域中的事物為中心思考問題Object1Object2Objectn.對象歸類-抽象化Class1Class2Classn.類實例化:定義對象,構(gòu)建系統(tǒng),形成解決方案面向?qū)ο筚Y料19lCoad和Yourdon給出了
6、一個定義:“面向?qū)ο?對象+類+繼承+通信”。l如果一個軟件系統(tǒng)是使用這樣 4 個概念設(shè)計和實現(xiàn)的,則我們認(rèn)為這個軟件系統(tǒng)是面向?qū)ο蟮?。面向?qū)ο筚Y料20l對象是面向?qū)ο箝_發(fā)模式的基本成份。l每個對象可用它本身的一組屬性和它可以執(zhí)行的一組操作來定義。l屬性一般只能通過執(zhí)行對象的操作來改變。l操作又稱為方法或服務(wù),它描述了對象執(zhí)行的功能,若通過消息傳遞,還可以為其它對象使用。面向?qū)ο筚Y料21l消息是一個對象與另一個對象的通信單元,是要求某個對象執(zhí)行類中定義的某個操作的規(guī)格說明。l一個對象接收到消息則調(diào)用消息中指定的方法,并將形式參數(shù)與參數(shù)表中相應(yīng)的值結(jié)合起來。面向?qū)ο筚Y料22l類是一組具有相同數(shù)據(jù)
7、結(jié)構(gòu)和相同操作的對象的集合。l類的定義包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。l類定義可以視為一個具有類似特性與共同行為的對象的模板,可用來產(chǎn)生對象。面向?qū)ο筚Y料23l同一個類的每個對象都是類的實例 (Instance)(Instance),它們都可使用類中提供的函數(shù)。l對象的狀態(tài)則包含在它的實例變量,即實例的屬性中。面向?qū)ο筚Y料24l繼承是使用已存在的定義做為基礎(chǔ)建立新定義的技術(shù)。l新類的定義是基礎(chǔ)類所聲明的數(shù)據(jù)和新類所增加的聲明的組合。新類復(fù)用既存的定義,而不要求修改既存類。l既存類可當(dāng)做基類來引用,則新類相應(yīng)地可當(dāng)做派生類來引用。面向?qū)ο筚Y料25l面向?qū)ο蠓治鯫OAl面向?qū)ο笤O(shè)計OOD
8、l面向?qū)ο髮崿F(xiàn)OOP面向?qū)ο筚Y料26l面向?qū)ο蠹夹g(shù)是許多人歷經(jīng)多年研究積累的產(chǎn)物。類的概念,是面向?qū)ο蟮闹匾M成部分。Smalltalk,提出許多面向?qū)ο蠹夹g(shù)的核心概念,如:消息和繼承。Dijkstra的軟件正確性理念,提出了用抽象層構(gòu)造軟件的觀點。Ada語言,提出了一般性和包兩個概念。C+語言,最廣泛使用的面向?qū)ο蟮恼Z言。Java語言,健壯的、可移植的、流行的面向?qū)ο笳Z言。面向?qū)ο筚Y料27l1988年到1992年是面向?qū)ο蠓椒▽W(xué)蓬勃發(fā)展的時期,人們從各自的經(jīng)歷和軟件開發(fā)的經(jīng)驗提出了各種面向?qū)ο蟮拈_發(fā)方法,代表的有:Sally Shlaer 和 Steve Mellor以信息模型化方法作為基礎(chǔ)
9、,并為目標(biāo)系統(tǒng)增設(shè)了狀態(tài)模型和過程模型; Peter Coad 和 Ed Yourdon則在信息模型化、面向?qū)ο蟮某绦蛟O(shè)計語言和基于知識的系統(tǒng)的基礎(chǔ)上,建立了他們的OOA和OOD,主要工具是類與對象圖、對象狀態(tài)圖和服務(wù)圖;HP公司的Fusion開發(fā)方法。面向?qū)ο筚Y料28Jim RumbaughGrady BoochIvar Jacobson面向?qū)ο筚Y料29lOOA和OOD是面向?qū)ο蠓椒▽W(xué)中重要的部分,UML是具體的方法lOOP涉及到具體的編程語言,C+l開發(fā)要使用合適的工具IDE:Visual C面向?qū)ο筚Y料30封裝(Encapsulation)通過定義類實現(xiàn)繼承(Inheritance)通過
10、派生新類實現(xiàn)多態(tài)性(Morphism)虛擬函數(shù)實現(xiàn)面向?qū)ο筚Y料lXO(X?-Oriented)lSO(Service-Oriented)lOO(對象、類)lPO(過程、函數(shù)、變量)OO之后是什么?面向?qū)ο筚Y料32第一章 C+基礎(chǔ)面向?qū)ο筚Y料33lC C語言語言19721972年年,由,由Dennis RitchieDennis Ritchie設(shè)計,可以設(shè)計,可以認(rèn)為是最優(yōu)影響力的發(fā)明之一。認(rèn)為是最優(yōu)影響力的發(fā)明之一。l為為改進(jìn)改進(jìn)C C語言語言,“帶類的帶類的C”,1983C”,1983命名為命名為C+C+對對C C的類型系統(tǒng)改進(jìn)和擴(kuò)充的類型系統(tǒng)改進(jìn)和擴(kuò)充( (更安全更安全) )支持面向?qū)ο笾?/p>
11、持面向?qū)ο髄C+C+保持與保持與C C兼容兼容( (快速普及快速普及) )lC+C+不是純粹的面向?qū)ο蟮恼Z言不是純粹的面向?qū)ο蟮恼Z言面向?qū)ο筚Y料34面向?qū)ο筚Y料35l關(guān)鍵字關(guān)鍵字l各種常量各種常量l操作符操作符l標(biāo)識符標(biāo)識符l分隔符分隔符面向?qū)ο筚Y料36面向?qū)ο筚Y料37l注釋注釋l輸入和輸出輸入和輸出l函數(shù)函數(shù)l變量(對象)變量(對象)l符號常量符號常量l表達(dá)式表達(dá)式l語句語句面向?qū)ο筚Y料38面向?qū)ο筚Y料39l基本語法如下:數(shù)據(jù)類型 標(biāo)識符1,標(biāo)識符2,。標(biāo)識符n;l初始化數(shù)據(jù)類型 標(biāo)識符1(初始值1),標(biāo)識符2(初始值2),。標(biāo)識符n(初始值n);數(shù)據(jù)類型 標(biāo)識符1=初始值1,標(biāo)識符2=初始
12、值2,。標(biāo)識符n=初始值n;l賦值I=10;面向?qū)ο筚Y料40l整數(shù)常量整數(shù)常量l浮點常量浮點常量l字符常量字符常量l字符串常量字符串常量l布爾常量布爾常量面向?qū)ο筚Y料41l定義:定義:通過枚舉一個類型的值域來定義一個數(shù)據(jù)類通過枚舉一個類型的值域來定義一個數(shù)據(jù)類型,值域是通過在枚舉聲明時所指定的一組型,值域是通過在枚舉聲明時所指定的一組文字量(又稱枚舉常量)指定的。文字量(又稱枚舉常量)指定的。l語法形式:語法形式:enum enum 標(biāo)識符標(biāo)識符 標(biāo)識符標(biāo)識符1 1,標(biāo)識符,標(biāo)識符2 2,標(biāo)識符,標(biāo)識符3 3,。標(biāo)識符,。標(biāo)識符n;n;面向?qū)ο筚Y料42l表達(dá)式由操作數(shù)和操作符組成,操作符分:表
13、達(dá)式由操作數(shù)和操作符組成,操作符分:算術(shù)操作符算術(shù)操作符:+ +、- -、* *、/ /、% %、+、-關(guān)系操作符關(guān)系操作符: 、 =、=、!=!=邏輯操作符邏輯操作符:&、|、! !逗號表達(dá)式逗號表達(dá)式:?:?:sizeofsizeof操作符操作符:sizeofsizeof位操作符位操作符:& &、| |、 賦值操作符賦值操作符:= =面向?qū)ο筚Y料43l隱含地從一種類型向另一種類型的值的隱含地從一種類型向另一種類型的值的映射。映射。l賦值類型強(qiáng)制賦值類型強(qiáng)制右邊的表達(dá)式類型映射成左值的類型。右邊的表達(dá)式類型映射成左值的類型。l強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換static_ca
14、st(E)static_cast(E)T(E)T(E)(T)E(T)E面向?qū)ο筚Y料44l順序結(jié)構(gòu)順序結(jié)構(gòu)表達(dá)式語句表達(dá)式語句空語句空語句塊語句塊語句l選擇結(jié)構(gòu)選擇結(jié)構(gòu)l循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)面向?qū)ο筚Y料45lififlif-elseif-else及其嵌套及其嵌套lswitchcaseswitchcase面向?qū)ο筚Y料46lwhilewhileldowhiledowhilelf foror面向?qū)ο筚Y料47循環(huán)是可以嵌套的面向?qū)ο筚Y料48lgotogotolbreakbreaklcontinuecontinue面向?qū)ο筚Y料49面向?qū)ο筚Y料50l完成特定功能的一段代碼完成特定功能的一段代碼具有合法的名稱具有
15、合法的名稱具有一定返回類型具有一定返回類型可以多次調(diào)用可以多次調(diào)用l基本形式:基本形式:返回類型返回類型 函數(shù)名(形式參數(shù)函數(shù)名(形式參數(shù)1 1,形式參數(shù)形式參數(shù)2 2,。,形式參數(shù),。,形式參數(shù)n)n) 函數(shù)體;函數(shù)體; 面向?qū)ο筚Y料51l值調(diào)用值調(diào)用l地址調(diào)用地址調(diào)用l引用調(diào)用引用調(diào)用l參數(shù)的求值順序參數(shù)的求值順序#include double Volume(double radius,double height);int main()double v;v=Volume(3.0,3.0);coutVolume=vendl;return 0;double Volume(double radi
16、us,double height)double result=3.14 * radius * radius * height;return result;面向?qū)ο筚Y料52l具有相同函數(shù)名,但其參數(shù)個數(shù)不同或參數(shù)類型不同的一組函數(shù)稱為重載。面向?qū)ο筚Y料53l函數(shù)聲明中可以為一個或多個參數(shù)指定缺省參數(shù)值。具有缺省值的參數(shù)右邊不能出現(xiàn)沒有缺省值的參數(shù)。重載函數(shù)的參數(shù)具有缺省值時要注意。例:lvoid fun(int x,int y=0)lvoid fun(int x)面向?qū)ο筚Y料544.1類的結(jié)構(gòu)lC+的類是對象的抽象數(shù)據(jù)成員。成員函數(shù)。lC+類的說明第二部分 C+語法概要面向?qū)ο筚Y料55舉例:Cl
17、ass Rectangle public: Rectangle(int x,int y,int w,int h); void Move(int x,int y); void Size(int w,int h); void Where(int& x,int& y); int Area(); void Draw(); private: int X,Y,W,H; ; 4.1類的結(jié)構(gòu)(外部說明)面向?qū)ο筚Y料56l訪問控制描述符public后聲明的是公有數(shù)據(jù)成員和成員函數(shù),可被任何程序單元引用。private后聲明的是私有數(shù)據(jù)成員和成員函數(shù),僅可被類內(nèi)部引用。public和private
18、出現(xiàn)的順序和次數(shù)是任意的。4.1類的結(jié)構(gòu)(外部說明)面向?qū)ο筚Y料57l類成員函數(shù)的實現(xiàn)4.1類的結(jié)構(gòu)(內(nèi)部實現(xiàn))Void Rectangle:Move(int x,int y) X=x; Y=y; void Rectangle:Size(int w,int h) W=w; H=h; 面向?qū)ο筚Y料58l一般語法:類標(biāo)識符 對象標(biāo)識符;l可以聲明多個對象,對象之間代碼共享,數(shù)據(jù)獨立。l可使用對象名引用對象的公有成員函數(shù)。方法如下:對象名.成員函數(shù)名(參數(shù)列表);面向?qū)ο筚Y料59l成員函數(shù)所操作的數(shù)據(jù)成員是該類的某個對象的數(shù)據(jù)成員。面向?qū)ο筚Y料604.2類的實例化-對象的實現(xiàn)面向?qū)ο筚Y料61l構(gòu)造函
19、數(shù)的作用是在對象被創(chuàng)建時使用特定的值構(gòu)造對象(初始化)。l析構(gòu)函數(shù)的作用是在對象被刪除時做一些清理工作。l構(gòu)造函數(shù)與類同名。l析構(gòu)函數(shù)是類名前加l兩者無返回類型,析構(gòu)函數(shù)無參數(shù)。面向?qū)ο筚Y料62#include class Location public: Location(int x,int y); Location(); int GetX(); int GetY(); private: int X,Y; ; 舉例面向?qū)ο筚Y料63Location:Location(int x,int y) X=x; Y=y; Location:Location() cout”Destructor calle
20、d.”endl; int Location:GetX() return X; int Location:GetY() return Y; 面向?qū)ο筚Y料64#include int main() Location A(10,20); /構(gòu)造函數(shù)被調(diào)用 coutA.GetX()”,”A.GetY()endl; return 0; /析構(gòu)函數(shù)被調(diào)用 輸出結(jié)果: Constructor called 10,20 Destructor called. 面向?qū)ο筚Y料65l函數(shù)體放在類體內(nèi)。l函數(shù)體放在類體外,使用inline關(guān)鍵字。class Location public: void Init(int
21、x,int y) X=x;Y=y; int GetX()return X; int GetY()return Y; private: int X,Y; ; 面向?qū)ο筚Y料66class Location public: void Init(int x,int y); int GetX(); int GetY(); private: int X,Y; ; inline Location:Init(int x,int y) X=x;Y=y; inline Location:GetX() return X; 面向?qū)ο筚Y料67#include class Locationpublic:Location(
22、int x=0,int y=0);void Move(int x=5,int y=5);void ValueX(int x);int ValueX();void ValueY(int y);int ValueY();private:void Set(int x,int y);int X,Y;面向?qū)ο筚Y料68Location:Location(int x,int y)Set(x,y);void Location:Move(int x,int y)Set(x,y);void Location:ValueX(int val)X=val;int Location:ValueX()return X;vo
23、id Location:ValueY(int val)Y=val;int Location:ValueY()return Y;void Location:Set(int x,int y)X=x;Y=y;面向?qū)ο筚Y料69int main()Location A,B; /Location A(0,0),B(0,0) A.Move(); /A.X和A.Y被設(shè)為5 A.ValueX(15); /A.X=15 coutA.ValueX()A.ValueY()endl; B.Move(6,2); /B.X=6,B.Y=2 B.ValueY(4); coutB.ValueX()B.ValueY()b; if
24、(b0) int c; /c 的 作 用 域 結(jié) 束 /a,b 的 作 用 域 結(jié) 束 面向?qū)ο筚Y料74if(int i=f() i=2*i; else i=100; /i 的作用域結(jié)束 couti; /錯誤 switch(int i=f() case 1: / i 的作用域結(jié)束 couti; /錯誤 面向?qū)ο筚Y料75面向?qū)ο筚Y料76面向?qū)ο筚Y料77l標(biāo)識符是否可以引用。標(biāo)識符是否可以引用。l在嵌套作用域中,內(nèi)層作用域的標(biāo)識符在嵌套作用域中,內(nèi)層作用域的標(biāo)識符優(yōu)先于外層作用域的標(biāo)識符。優(yōu)先于外層作用域的標(biāo)識符。lC+C+中,標(biāo)識符必須先聲明后引用,在同中,標(biāo)識符必須先聲明后引用,在同一作用域中
25、不能聲明同樣的標(biāo)識符。一作用域中不能聲明同樣的標(biāo)識符。面向?qū)ο筚Y料78#include int I; int main() I=5; int I; I=7; cout”I=”Iendl; cout”I=”Iendl; return 0; 面向?qū)ο筚Y料79l靜態(tài)生存期靜態(tài)生存期與程序的運行期相同。這種對象的存儲單元相對位與程序的運行期相同。這種對象的存儲單元相對位置在整個程序的運行期間不變置在整個程序的運行期間不變文件作用域或用文件作用域或用staticstatic指定。指定。若未顯式指定初始值,為零。若未顯式指定初始值,為零。l動態(tài)生存期動態(tài)生存期在函數(shù)內(nèi)部(塊作用域)聲明的對象是動態(tài)生存期。
26、在函數(shù)內(nèi)部(塊作用域)聲明的對象是動態(tài)生存期。若未顯式指定初始值,為任意值。若未顯式指定初始值,為任意值。面向?qū)ο筚Y料80#include void fun(); int main() fun(); fun(); void fun() static int a=1; int I=5; a+; I+; Cout”I=”I”,a=”aendl; 面向?qū)ο筚Y料81面向?qū)ο筚Y料82l數(shù)據(jù)存儲在局部對象中,通過參數(shù)傳遞機(jī)制實數(shù)據(jù)存儲在局部對象中,通過參數(shù)傳遞機(jī)制實現(xiàn)函數(shù)間的數(shù)據(jù)共享?,F(xiàn)函數(shù)間的數(shù)據(jù)共享。l數(shù)據(jù)存儲在全局對象中,通過全局對象進(jìn)行數(shù)數(shù)據(jù)存儲在全局對象中,通過全局對象進(jìn)行數(shù)據(jù)交換。據(jù)交換。l封
27、裝在類中封裝在類中l(wèi)全局對象存在的問題全局對象存在的問題可見性無限制可見性無限制不能保證操作的合法性不能保證操作的合法性l解決上述問題的方法是類及其封裝技術(shù),相應(yīng)解決上述問題的方法是類及其封裝技術(shù),相應(yīng)提出靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。提出靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。面向?qū)ο筚Y料83#include class Application public: static void f(); static void g(); private: static int global; ; int Application:global=0; void Application:f() global=5; voi
28、d Application:g() coutglobalendl; int main() Application:f(); Application:g(); return 0; 面向?qū)ο筚Y料84class A public: static void f( A a); private: int x; ; void A:f(A a) coutx; /錯誤,靜態(tài)成員函數(shù)的實現(xiàn)中不能直接引用類中聲明的非靜態(tài)成員。 couta.x; 面向?qū)ο筚Y料85class goods public: goods(int w); goods(); int Weight(); static int TotalWeigh
29、t(); private: int weight; static int totalWeight; ; 面向?qū)ο筚Y料86goods:goods(int w) weight=w; totalWeight += w; goods:goods() totalWeight -= w ; int goods:Weight() return weight; int goods:TotalWeight() return totalWeight; 面向?qū)ο筚Y料87面向?qū)ο筚Y料88面向?qū)ο筚Y料89l指針:對象的地址指針:對象的地址l指針對象:存放指針的對象指針對象:存放指針的對象l聲明指針對象的語法:聲明指針對
30、象的語法:T T * *標(biāo)識符;標(biāo)識符;int int * *pointer;pointer;l一個指針對象被賦值為一個對象的地址一個指針對象被賦值為一個對象的地址后,稱指針指向?qū)ο?。后,稱指針指向?qū)ο?。面向?qū)ο筚Y料90l& -& -取地址操作取地址操作l* * - -目標(biāo)操作目標(biāo)操作Int val; Int *pointer; Pointer=&val; Int *pointer(&val); *pointer =val 面向?qū)ο筚Y料91#include void swap(double* first,double* second); int main() d
31、ouble a(12),b(22); swap(&a,&b); cout”a=”a”,b=”bendl; return 0; void swap(double * first,double* second) double temp; temp=*first; *first=*second; *second=temp; 面向?qū)ο筚Y料92面向?qū)ο筚Y料93面向?qū)ο筚Y料94面向?qū)ο筚Y料95l數(shù)組:一組類型相同的對象l聲明語法:類型標(biāo)識符元素個數(shù);l數(shù)組元素可以用下標(biāo)引用數(shù)組名index;l數(shù)組元素也可以用指針引用面向?qū)ο筚Y料96l通過指針引用數(shù)組元素定義指針對象數(shù)組的地址賦值給指針對象
32、。l指針引用數(shù)組元素的方法*(pointer + n)pointern面向?qū)ο筚Y料97l沒有為數(shù)組指定顯式初始值時,數(shù)組元素使用缺省值初始化,當(dāng)定義對象數(shù)組時,類中必須定義一個缺省的構(gòu)造函數(shù)。Int main() coutEntering mainendl; Location A2; For(int I=0;I2;I+_ AI.Move(I+10I+10); Cout”exiting main”i; int& ref=ai; ref=55; coutrefendl; return 0; 面向?qū)ο筚Y料101int& f(int index,int a) int& r= a
33、index; retu rn r; int m ain() int a= 1 ,3 ,5 ,7 ,9 ; f(2 ,a)= 5 5 ; co u t f(2 ,a); retu rn 0 ; int& f(int index,int a) int r= aindex; retu rn r; 面向?qū)ο筚Y料102l在程序運行中根據(jù)需要在堆內(nèi)存中創(chuàng)建的對象,使用完成后隨時被刪除。l創(chuàng)建語法如下:T* ptr=new T(初始值列表);l刪除語法如下:delete ptr;l數(shù)組對象的創(chuàng)建int* ptr=new int10;l數(shù)組對象的刪除 delete ptr;面向?qū)ο筚Y料103# inc
34、lu de # inclu de # inclu de “l(fā)o catio n.h” int m ain() int *ptr; try ptr= new int1 0 0 ; catch(xallo c & e) co u t ”o u t o f m em ” endl; retu rn 1 ; fo r(int i= 0 ;iPC;delete elems;elems=new intsize=s-size; for(int I=0;IelemsI; 面向?qū)ο筚Y料105#include #include “l(fā)ocation.h” int main() cout”Step one:”
35、endl; Location* ptr1(new Location); Delete ptr1; Cout”Step two:”endl; Ptr1=new Location(1,2); Delete ptr1; Return 0; Step one: Default constructor called. Destructor called.1,2 Step two: Constructor called.1,2 Destructor called.1,2 面向?qū)ο筚Y料106l數(shù)組元素的類型是指針,這樣的數(shù)組稱指針數(shù)組。l語法:T* 標(biāo)識符元素個數(shù);面向?qū)ο筚Y料107l多維數(shù)組可以解釋為其元
36、素是多維數(shù)組的一維數(shù)組。面向?qū)ο筚Y料108l一個成員函數(shù)被調(diào)用時,被自動傳遞一個隱含的參數(shù),該參數(shù)是一個指向正被該函數(shù)操作的對象的指針,在程序中可以用this引用它,因此稱其為this指針。Class Location public: Location(int xx,int yy)X=xx;Y=yy; Void Assign(Location& p); Int GetX()return X; Int GetY()return Y; Private: Int X,Y; ; void Location:Assign(Location& p) if(this!=&p) X=p
37、.X; Y=p.Y; 面向?qū)ο筚Y料109l用內(nèi)部包含子對象的類實現(xiàn)復(fù)雜的類l子對象的初始化面向?qū)ο筚Y料110#include “part.h” Part:Part() val=0; cout”Default constructor of Part”endl; Part:Part(int i) val=i; cout”Constructor of Part”valendl; Part:Part() cout”Destructor of Part”valendl; void Part:Print() coutvalendl; #if !defined(_PART_H) #define_ PART_
38、H class Part public: Part(); Part(int i); Part(); void Print(); private: int val; ; 面向?qū)ο筚Y料111#if !defined(_WHOLE_H) #define _WHOLE_H #include “part.h” class Whole public: Whole(); Whole(int I,int j,int k); Whole(); void Print(); private: Part one; Part two; Int date; ; # inclu de “w ho le.h” W ho le
39、:W ho le() date= 0 ; co u t ”D efau lt co nstru cto r o f W ho le” endl; W ho le:W ho le(int I,int j,int k):tw o (I),o ne(j),date(k) co u t ”C o nstru cto r o f W ho le” endl; W ho le:W ho le() co u t ”D estru cto r o f W ho le” endl; vo id W ho le:P rint() o ne.P rint(); tw o .P rint(); co u t date
40、 endl; 面向?qū)ο筚Y料112#include “whole.h” int main() Whole anObject(5,6,10); /Whole anObject; AnObject.Print(); return 0; Constructor of Part5 Constructor of Part6 Constructor of Whole 6 5 10 Destructor of Whole Destructor of Part5 Destructor of Part6 面向?qū)ο筚Y料113l當(dāng)使用操作符來表達(dá)對對象的某個操作當(dāng)使用操作符來表達(dá)對對象的某個操作時,可以將操作符函數(shù)聲
41、明為類的成員時,可以將操作符函數(shù)聲明為類的成員函數(shù)或類的友員函數(shù)。函數(shù)或類的友員函數(shù)。l操作符的參數(shù)個數(shù)、優(yōu)先級、結(jié)合性和操作符的參數(shù)個數(shù)、優(yōu)先級、結(jié)合性和使用語法是由使用語法是由C+C+規(guī)定的,不能被改變。規(guī)定的,不能被改變。l重載操作符的形參不能具有缺省值。重載操作符的形參不能具有缺省值。l重載操作符的返回值類型任意,但最好重載操作符的返回值類型任意,但最好不是不是void void 。面向?qū)ο筚Y料114#include class complex public: complex(double r=0,double I=0); complex operator+(const complex
42、& c); complex operator -(const complex& c); complex operator (); void print()const; private: double real,imag; ; 面向?qū)ο筚Y料115complex complex:operator + (const complex& c) double r=real+c.real; double I=imag+c.imag; return complex(r,I); complex complex:operator complex complex:operator (cons
43、t complex& c) (const complex& c) double r=realdouble r=real- -c.real;c.real; double double I I=imag=imag- -c.imag;c.imag; return complex(r,return complex(r,I I);); Complex:complex(double r,double I) real=r;imag=I; complex complex:operator + (const complex& c) double r=real+c.real; double
44、 I=imag+c.imag; return complex(r,I); complex complex:operator (const complex& c) double r=real-c.real; double I=imag-c.imag; return complex(r,I); 面向?qū)ο筚Y料116complex complex:operator () return complex(-real,-imag); void complex:print()const cout”(“real”,”imag”)”endl; 面向?qū)ο筚Y料117int main() complex c1(
45、2.5,3.7),c2(4.2,6.5); complexc ; c=c1-c2; /c1.operator (c2) c.print(); c=c1+c2; /c1.operator +(c2) c.print(); c=-c1; /c1.operator () c.print(); return 0; 面向?qū)ο筚Y料118#include class complex public: complex(double r=0,double I=0); friend complex operator+(const complex& c1,const complex& c2); fri
46、end complex operator -(const complex& c1,const complex& c2); friend complex operator (const complex& c); void print()const; private: double real,imag; ; 面向?qū)ο筚Y料119Complex:complex(double r,double I) real=r;imag=I; complex complex:operator + (const complex& c1,const complex& c2) dou
47、ble r=c1.real+c2.real; double I=c1.imag+c2.imag; return complex(r,I); complex complex:operator (const complex& c1,const complex& c2) double r=c1,real-c2.real; double I=c1.imag-c2.imag; return complex(r,I); 面向?qū)ο筚Y料120complex complex:operator (const complex& c) return complex(-c.real,-c.ima
48、g); void complex:print()const cout”(“real”,”imag”)”endl; 面向?qū)ο筚Y料121int main() complex c1(2.5,3.7),c2(4.2,6.5); complexc ; c=c1-c2; /operator (c1,c2) c.print(); c=c1+c2; /operator + (c1,c2) c.print(); c=-c1; /operator (c1) c.print(); return 0; 面向?qū)ο筚Y料122l一元函數(shù)最好重載為成員函數(shù)一元函數(shù)最好重載為成員函數(shù)l二元函數(shù)一般重載為友元函數(shù)二元函數(shù)一般重載
49、為友元函數(shù)27.5+27.5+x xl賦值操作符只能重載為成員函數(shù)賦值操作符只能重載為成員函數(shù)27.5=27.5=x xl+和和-操作符有兩種形式,一般被重載操作符有兩種形式,一般被重載為成員函數(shù)為成員函數(shù)其中后綴操作重載后帶有一個整型參數(shù)。其中后綴操作重載后帶有一個整型參數(shù)。面向?qū)ο筚Y料123l下標(biāo)操作符只能被重載為成員函數(shù)下標(biāo)操作符只能被重載為成員函數(shù)l函數(shù)調(diào)用操作符可以看作是下標(biāo)操作符函數(shù)調(diào)用操作符可以看作是下標(biāo)操作符的擴(kuò)展的擴(kuò)展面向?qū)ο筚Y料124l通過已有的類進(jìn)行擴(kuò)展產(chǎn)生新類的過程通過已有的類進(jìn)行擴(kuò)展產(chǎn)生新類的過程l產(chǎn)生的新類稱派生類產(chǎn)生的新類稱派生類l產(chǎn)生派生類的類稱基類或父類。產(chǎn)生
50、派生類的類稱基類或父類。l從一個基類派生稱單基繼承,從多個基從一個基類派生稱單基繼承,從多個基類派生稱多基繼承。類派生稱多基繼承。面向?qū)ο筚Y料125Mouse ScreenDeviceKeyboardTreeAppleTreeFruit面向?qū)ο筚Y料126單基繼承的語法 class 派生類名:訪問控制 基類名 數(shù)據(jù)成員和成員函數(shù)聲明; 多基繼承的語法 class 派生類名:訪問控制 基類名1,訪問控制 基類名2 數(shù)據(jù)成員和成員函數(shù)聲明; 面向?qū)ο筚Y料127l訪問控制用于控制基類中聲明的名字在多大的范圍內(nèi)能夠被派生類的用戶訪問l訪問控制有三種public,protected,private基類模塊
51、派生類模塊間接派生類模塊其他程序模塊面向?qū)ο筚Y料128Class Location Public: Void InitL(int xx,int yy); Void Move(int xOff,int yOff); Int GetX()return X; Int GetY()return Y; Private: Int X,Y; ; void Location:InitL(int xx,int yy) X=xx; Y=yy; void Location:Move(int xOff,int yOff) X+=xOff; Y+=yOff; Class Rectangle:public Locatio
52、n Public: Void InitR(int x,int y,int w,int h); Int GetW()return W; Int GetH()return H; Private: Int W,H; ; void Rectangle:InitR(int x,int y,int w,int h) InitL(x,y); W=w; H=h; 面向?qū)ο筚Y料129#include int main() Rectangle rect; Rect.InitR(2,3,20,10); Rect.Move(3,2); Coutrect.GetX()”,” rect.GetY()”,” rect.Ge
53、tW()”,” rect.GetH()endl; return 0; 面向?qū)ο筚Y料130Class Rectangle:private Location Public: Void InitR(int x,int y,int w,int h); Void Move(int xOff,int yOff); Int GetX()return Location:GetX(); Int GetY()return Location:GetY(); Int GetW()return W; Int GetH()return H; Private: Int W,H; ; void Rectangle:InitR
54、(int x,int y,int w,int h) InitL(x,y); W=w; H=h; void Rectangle:Move(int xOff,int yOff) Location:Move(xOff,yOff); 面向?qū)ο筚Y料131Class V:public Rectangle Public: Void Function(); ; void V:Function() Move(3,2); int main() Rectangle rect; Rect.Move(3,2); 面向?qū)ο筚Y料132l對V模塊是publicl對H模塊是privateClass A Protected: I
55、nt X; int main() A a; a.X=5; /錯錯誤誤 class B:public A public: void Function(); void B:Function() X=5; 面向?qū)ο筚Y料133l可以將其視為單繼承來考察,每個基類與派生類的關(guān)系可以當(dāng)做單基繼承。面向?qū)ο筚Y料134l派生類的數(shù)據(jù)成員由屬于基類的部分和屬于自己的部分組成,屬于基類的部分初始化應(yīng)由基類的構(gòu)造函數(shù)完成。l構(gòu)造函數(shù)不被繼承,派生類必須調(diào)用基類的構(gòu)造函數(shù)來初始化屬于基類的部分?jǐn)?shù)據(jù)成員。l一般形式如下:C:C(參數(shù)表0):C1(參數(shù)表1),C2(參數(shù)表2),Cn(參數(shù)表n)面向?qū)ο筚Y料135l如果冒號
56、右邊的某個基類的構(gòu)造函數(shù)參數(shù)表為空,則可以省略該項。l構(gòu)造對象時,先執(zhí)行基類的構(gòu)造函數(shù),然后執(zhí)行派生類的構(gòu)造函數(shù)。析構(gòu)時則相反。l多基繼承時基類構(gòu)造函數(shù)的執(zhí)行順序由繼承時的順序決定(從左向右),與初始化列表中的順序無關(guān)。面向?qū)ο筚Y料136#include class B public: B(); B(int I); B(); void Print() const; private: int b; ; B:B() b=0; cout”Bs default constructor called.”endl; B:B(int I) b=I; cout”Bs constructor called.”e
57、ndl; B:B() cout”Bs destructor called.”endl; void B:Print() const coutbendl; 面向?qū)ο筚Y料137class C:public B public: C(); C(int I,int j); C(); void Print() const; private: int c; ; C:C() c=0; cout”Cs default constructor called.”endl; C:C(int I,int j):B(i) c=j; cout”Cs constructor called.”endl; C:C() cout”C
58、s destructor called.”endl; void C:Print() const B:Print(); coutcendl; 面向?qū)ο筚Y料138Int main() C obj(5,6); Obj.Print(); Return 0; Bs constructor called. Cs constructor called. 5 6 Cs destructor called. Bs destructor called. 面向?qū)ο筚Y料139l如果派生類的一個表達(dá)式引用基類中不止一個成員,則存在二義性。l解決二義性的辦法是加類限定符。面向?qū)ο筚Y料140class A public:
59、void f(); class B public: void f(); void g(); class C:public A,public B public: void g(); void h(); ; C obj; obj.f(); /是是 A 的的 f()或或 B 的的 f()? 解決的辦法是在類解決的辦法是在類 C 中定義一個中定義一個 f()成員函數(shù)成員函數(shù) void C:f() A:f(); 或或 B:f(); 面向?qū)ο筚Y料141l如果一個派生類是從多個基類派生,而這些基類又有一個共同的基類,則在對該基類中聲明的標(biāo)識符進(jìn)行訪問時可能產(chǎn)生二義性。class B public: int
60、b; class B1:public B private: int b1; class B2:public B private: int b2; class C:public B1,public B2 public: int f(); private: int d; 面向?qū)ο筚Y料142BbB1b1Cf(),dBbB2b2面向?qū)ο筚Y料143C c; c.b; /錯錯 c.B:b ;/錯錯 c.B1:b;/對對 c.B2:b; /對對 int main() C c; c.B1:b=5; c.B2:b=10; cout”path B1”c.B1:bendl; cout”path B2”c.B2:bendl; return 0; 面向?qū)ο筚Y料144l為避免一個基類在多條繼承路徑上造成在派生類中產(chǎn)生多個基類子對象,可以采用虛基類技術(shù)。l語法如下class B1:virtual public Bclass B2:virtual public Bclass C:public B1,public B
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年八年級統(tǒng)編版語文寒假預(yù)習(xí) 第06講 《禮記》二則
- 2021年高考語文二輪復(fù)習(xí)講練測專題12-鑒賞詩歌的形象(測)(解析版)
- 二年級數(shù)學(xué)計算題專項練習(xí)1000題匯編集錦
- 【2021春備課】高中政治四步教學(xué)法(人教版-必修2):3.2-政府的責(zé)任:對人民負(fù)責(zé)-第2步-講
- 2025年跨0016成都合源美智教育科技有限公司
- 肌筋膜炎的治療教學(xué)材料
- 茅盾及其子夜課件
- 《個性時尚》課件
- 2024毛石加工定制與安裝服務(wù)合同3篇
- 2024年長春汽車經(jīng)濟(jì)技術(shù)開發(fā)區(qū)事業(yè)單位專項招聘筆試真題
- 2024-2030年中國水培蔬菜行業(yè)發(fā)展分析及投資前景預(yù)測研究報告
- 2023風(fēng)電機(jī)組預(yù)應(yīng)力混凝土塔筒與基礎(chǔ)結(jié)構(gòu)設(shè)計標(biāo)準(zhǔn)
- 3D打印技術(shù)在醫(yī)療領(lǐng)域的應(yīng)用
- 人員招聘的程序與信息發(fā)布
- 倉庫班長年終總結(jié)
- 血脂康膠囊的經(jīng)濟(jì)學(xué)評估
- 組織協(xié)調(diào)方案及措施
- 2024-2029年中國IP授權(quán)行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告
- 北京市海淀區(qū)2023-2024學(xué)年四年級上學(xué)期期末英語試題
- 2024年湖北省漢江國有資本投資集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 投資收益證明模板
評論
0/150
提交評論