




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C+程序設(shè)計題解與上機(jī)指導(dǎo)C+-程序設(shè)計題解與上機(jī)指導(dǎo)v類的聲明和定義類的聲明和定義v構(gòu)造函數(shù)、析構(gòu)函數(shù)構(gòu)造函數(shù)、析構(gòu)函數(shù)v對象的創(chuàng)建和使用對象的創(chuàng)建和使用v對象的數(shù)組、指針、賦值和復(fù)制對象的數(shù)組、指針、賦值和復(fù)制v靜態(tài)成員靜態(tài)成員v共用數(shù)據(jù)的保護(hù)共用數(shù)據(jù)的保護(hù)v友元友元4.0 面向?qū)ο蟪绦蛟O(shè)計方法概述面向?qū)ο蟪绦蛟O(shè)計方法概述 對象對象屬性(靜態(tài)特征)屬性(靜態(tài)特征)行為行為 (動態(tài)特征)(動態(tài)特征)發(fā)消息發(fā)消息 讓對象作什么。讓對象作什么。 一個系統(tǒng)中有多個對象相互作用。一個系統(tǒng)中有多個對象相互作用。數(shù)據(jù)數(shù)據(jù)函數(shù)(方法、操作)函數(shù)(方法、操作)調(diào)用對象中的函數(shù)就是向調(diào)用對象中的函數(shù)就是向該對
2、象發(fā)消息,是對象的該對象發(fā)消息,是對象的少量的對外接口。少量的對外接口。封裝性封裝性 、信息隱蔽、信息隱蔽C+中中現(xiàn)實的問題空間現(xiàn)實的問題空間抽象:抽象:現(xiàn)實中對象現(xiàn)實中對象 類類 對象(類的一個實例)對象(類的一個實例)抽象出抽象出C+類型類型 變量變量繼承性繼承性 與與 軟件重用軟件重用利用一個已有的類建立一個新類利用一個已有的類建立一個新類多態(tài)性:由繼承而產(chǎn)生的相關(guān)的不同的多態(tài)性:由繼承而產(chǎn)生的相關(guān)的不同的類,其對象對同一消息會做出不同響應(yīng)。類,其對象對同一消息會做出不同響應(yīng)。數(shù)據(jù)數(shù)據(jù) 函數(shù)(算法)函數(shù)(算法) 對象對象1數(shù)據(jù)數(shù)據(jù) 函數(shù)(算法)函數(shù)(算法) 對象對象2系統(tǒng)(程序)系統(tǒng)(程
3、序)消息消息面向過程面向過程面向?qū)ο竺嫦驅(qū)ο蟛煌瑢哟蔚某橄蟛煌瑢哟蔚某橄?基于對象就是基于類,基于對象就是基于類,C+中的類是實現(xiàn)面中的類是實現(xiàn)面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)。向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ)。面向?qū)ο筌浖_發(fā)面向?qū)ο筌浖_發(fā)規(guī)范的軟件開發(fā)過程規(guī)范的軟件開發(fā)過程(軟件工程學(xué)要解決的問題):(軟件工程學(xué)要解決的問題):1、面向?qū)ο蠓治觥⒚嫦驅(qū)ο蠓治鯫OA:粗略的分析任務(wù),歸納出有關(guān)對象:粗略的分析任務(wù),歸納出有關(guān)對象2、面向?qū)ο笤O(shè)計、面向?qū)ο笤O(shè)計OOD:對類進(jìn)行具體的設(shè)計,提出程序設(shè)計的:對類進(jìn)行具體的設(shè)計,提出程序設(shè)計的思路和方法,包括算法。思路和方法,包括算法。3、面向?qū)ο缶幊獭⒚嫦驅(qū)ο缶幊蘋O
4、P(選定一種語言寫程序)(選定一種語言寫程序)4、面向?qū)ο鬁y試、面向?qū)ο鬁y試OOT:以類作為測試的基本單元:以類作為測試的基本單元5、面向?qū)ο缶S護(hù)、面向?qū)ο缶S護(hù)OOSM:OOP的特性:的特性:u 抽象抽象u 封裝和數(shù)據(jù)隱藏封裝和數(shù)據(jù)隱藏u 繼承繼承u 多態(tài)多態(tài)u 代碼的可重用性代碼的可重用性 現(xiàn)實中對象現(xiàn)實中對象 類型類型 抽象抽象對象對象 類類型類類型定義定義4.1 類的聲明和實現(xiàn)類的聲明和實現(xiàn)類和對象的關(guān)系類和對象的關(guān)系u 類是對象的抽象,對象是類的具體實例。類是對象的抽象,對象是類的具體實例。u 某對象的類型稱為某類,或某對象是某類類型的一某對象的類型稱為某類,或某對象是某類類型的一個變
5、量。個變量。u 類類型是一種自定義的數(shù)據(jù)類型。類類型是一種自定義的數(shù)據(jù)類型。 用戶要先提供類的聲明和實現(xiàn),然后才能使用。用戶要先提供類的聲明和實現(xiàn),然后才能使用。類型是什么?類型是什么?指定類型完成了指定類型完成了3項工作:項工作:1、決定數(shù)據(jù)對象需要的內(nèi)存數(shù)量、決定數(shù)據(jù)對象需要的內(nèi)存數(shù)量2、決定如何解釋內(nèi)存中的位、決定如何解釋內(nèi)存中的位3、決定可使用數(shù)據(jù)對象執(zhí)行的操作或方法、決定可使用數(shù)據(jù)對象執(zhí)行的操作或方法l 對內(nèi)置的基本類型來說,有關(guān)操作的信息被內(nèi)置到編譯器中。對內(nèi)置的基本類型來說,有關(guān)操作的信息被內(nèi)置到編譯器中。l用戶自定義的類型必須自己提供這些信息。用戶自定義的類型必須自己提供這些信
6、息。l具有根據(jù)實際需要定制新數(shù)據(jù)類型的強(qiáng)大功能和靈活性。具有根據(jù)實際需要定制新數(shù)據(jù)類型的強(qiáng)大功能和靈活性。類是將抽象轉(zhuǎn)換為用戶定義類型的類是將抽象轉(zhuǎn)換為用戶定義類型的C+工具。它將數(shù)據(jù)和操縱數(shù)據(jù)工具。它將數(shù)據(jù)和操縱數(shù)據(jù)的方法組合成一個整體。的方法組合成一個整體。類規(guī)范由兩部分組成:類規(guī)范由兩部分組成: 類聲明(類的藍(lán)圖)類聲明(類的藍(lán)圖) 類方法定義:描述如何實現(xiàn)類成員函數(shù)。類方法定義:描述如何實現(xiàn)類成員函數(shù)。Class 類名類名 private:私有成員聲明塊;私有成員聲明塊; protected:保護(hù)成員聲明塊;保護(hù)成員聲明塊; public:公有成員聲明塊;公有成員聲明塊;一、類的聲明:
7、一、類的聲明:指出該類包括哪些數(shù)據(jù)和操作。指出該類包括哪些數(shù)據(jù)和操作。類頭類頭 類體類體數(shù)據(jù)成員數(shù)據(jù)成員成員函數(shù)成員函數(shù)成員訪問屬性成員訪問屬性修飾符修飾符分號結(jié)束分號結(jié)束class CStudent public : int num; char name20; char sex; void display( ); ;例:例:二、類成員訪問屬性:二、類成員訪問屬性:控制外部對類成員的訪問,控制外部對類成員的訪問,體現(xiàn)了類的數(shù)據(jù)隱藏性。體現(xiàn)了類的數(shù)據(jù)隱藏性。1) private: 限定為私有成員。限定為私有成員。 該成員只能被本類中的成員函數(shù)和類的友元函該成員只能被本類中的成員函數(shù)和類的友元函數(shù)
8、引用。數(shù)引用。 是類中的默認(rèn)訪問控制是類中的默認(rèn)訪問控制,可實現(xiàn)信息隱蔽。可實現(xiàn)信息隱蔽。2) public: 公用的成員公用的成員 可被本類中的成員函數(shù)引用,也可被類的作用可被本類中的成員函數(shù)引用,也可被類的作用域的其他函數(shù)引用。域的其他函數(shù)引用。 是類的對外接口是類的對外接口3) protected:受保護(hù)成員:受保護(hù)成員 不能被類外訪問,但可以被派生類的成員函數(shù)不能被類外訪問,但可以被派生類的成員函數(shù)訪問。訪問。 說明:說明: 每種說明符可在類體中使用多次。每種說明符可在類體中使用多次。 訪問限定符的作用域是從該說明符出現(xiàn)開始到訪問限定符的作用域是從該說明符出現(xiàn)開始到 下一個說明符之前或
9、類體結(jié)束之前結(jié)束。下一個說明符之前或類體結(jié)束之前結(jié)束。 如果在類體起始點無訪問說明符,系統(tǒng)默認(rèn)定如果在類體起始點無訪問說明符,系統(tǒng)默認(rèn)定 義為私有(義為私有(private)。)。 訪問限定符訪問限定符private(私有的)和(私有的)和protected (保護(hù)的)體現(xiàn)了類具有數(shù)據(jù)隱蔽性。(保護(hù)的)體現(xiàn)了類具有數(shù)據(jù)隱蔽性。 (Encapsulation)。)。class CStudent int num; public: float data; private: string name; char sex; public : void display( ); ;類和結(jié)構(gòu)體的異同類和結(jié)構(gòu)體的
10、異同 C+ 中擴(kuò)展了中擴(kuò)展了C 中結(jié)構(gòu)體中結(jié)構(gòu)體struct 的定義,使類和的定義,使類和結(jié)構(gòu)體具有同樣的功能。但結(jié)構(gòu)體中默認(rèn)的成員訪問結(jié)構(gòu)體具有同樣的功能。但結(jié)構(gòu)體中默認(rèn)的成員訪問限定為限定為public ,即它不天生具備信息隱蔽的特征。即它不天生具備信息隱蔽的特征。 struct CStudent . ;l 建議盡量使用類建議盡量使用類class 三、三、 類的實現(xiàn)類的實現(xiàn)-類的成員函數(shù)的定義類的成員函數(shù)的定義函數(shù)定義:函數(shù)定義:通常在類定義中,成員函數(shù)僅作聲明。通常在類定義中,成員函數(shù)僅作聲明。 函數(shù)定義通常在類的聲明之后,在類外進(jìn)行。函數(shù)定義通常在類的聲明之后,在類外進(jìn)行。格式如下:格
11、式如下: 返回值類型返回值類型 類名類名 : 函數(shù)名函數(shù)名(參數(shù)表參數(shù)表) /函數(shù)體函數(shù)體 其中運(yùn)算符其中運(yùn)算符“:”稱為作用域運(yùn)算符,它指出該函稱為作用域運(yùn)算符,它指出該函數(shù)是屬于哪一個類的成員函數(shù)。數(shù)是屬于哪一個類的成員函數(shù)。class CStudent int num; string name; char sex; int getnum三三return num; public : void display( ); ; void CStudent: display( ) cout “num”getnum三三endl; cout “name”nameendl; cout “sex”sexen
12、dl; : display三三 v類的成員具有類的成員具有 類作用域。類作用域。v它們不是全局函它們不是全局函數(shù)數(shù) 四、四、inline成員函數(shù)成員函數(shù)在類內(nèi)定義的函數(shù)默認(rèn)為內(nèi)聯(lián)函數(shù)在類內(nèi)定義的函數(shù)默認(rèn)為內(nèi)聯(lián)函數(shù)在類內(nèi)用在類內(nèi)用inline 聲明的函數(shù),在類外定義,聲明的函數(shù),在類外定義, 前面加前面加inline。例:例:class CStudent int num; public : void display1三三 cout“hello”endl; inline void display2( ); ; inline void CStudent: display2( ) cout “num”
13、numdisplay三三; (*p) . display三三;3、通過對象的引用來訪問對象成員、通過對象的引用來訪問對象成員 CStuent stu1; CStuent &pp=stu1; 三三;聲明類類型聲明類類型定義對象定義對象使用對象使用對象直接訪問直接訪問間接訪問間接訪問簡單訪問簡單訪問(三)(三) 對象的存儲對象的存儲: : 圖圖1 1 各對象完全獨立地安排內(nèi)存的方案各對象完全獨立地安排內(nèi)存的方案u注意:區(qū)別同一個類的各個不同的對象的屬性是由數(shù)據(jù)成員注意:區(qū)別同一個類的各個不同的對象的屬性是由數(shù)據(jù)成員決定的,不同對象的數(shù)據(jù)成員的內(nèi)容是不一樣的;而行為(操決定的,不同對象的數(shù)據(jù)成員的內(nèi)
14、容是不一樣的;而行為(操作)是用函數(shù)來描述的,這些操作的代碼對所有對象都是一樣作)是用函數(shù)來描述的,這些操作的代碼對所有對象都是一樣的。的。數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)代碼區(qū)代碼區(qū)對象對象1 1對象對象數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)代碼區(qū)代碼區(qū)對象對象數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)代碼區(qū)代碼區(qū)圖圖2 各對象的代碼區(qū)共用的方案各對象的代碼區(qū)共用的方案數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)對象對象1數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)對象對象數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)對象對象公共代碼區(qū)公共代碼區(qū) 圖圖2 僅為每個對象分配一個數(shù)據(jù)區(qū),而代碼區(qū)(放所僅為每個對象分配一個數(shù)據(jù)區(qū),而代碼區(qū)(放所有成員函數(shù)的區(qū)域)為各對象共用。有成員函數(shù)的區(qū)域)為各對象共用。 ?如何確定函數(shù)訪問的是哪一個對象的數(shù)據(jù)成員?如何確定函數(shù)訪問
15、的是哪一個對象的數(shù)據(jù)成員 this 指針指針物理實現(xiàn)和物理實現(xiàn)和邏輯上關(guān)系邏輯上關(guān)系節(jié)詳講節(jié)詳講例例.#include “iostream” using namespace stdclass CStudent float score; public: int num; char sex; public : void fun1( int a); void display( );; void CStudent: display( ) cout sexnumendl; cout “score”scoreb; stud1.score=98.0; stud1.fun1( b); stud1.displa
16、y( ); coutsizeof(CStudent); coutsizeof(stu1); return 0; 類的簡單應(yīng)用類的簡單應(yīng)用. 實際使用中通常利用構(gòu)實際使用中通常利用構(gòu)造函數(shù)來初始化數(shù)據(jù)成員造函數(shù)來初始化數(shù)據(jù)成員. ?對象的數(shù)據(jù)成員如對象的數(shù)據(jù)成員如何初始化何初始化?類中的私有類中的私有數(shù)據(jù)成員如數(shù)據(jù)成員如何賦值何賦值例例#include “iostream” using namespace stdclass CStudent float score;public: int num;private: void fun1( int a); public : void display(
17、int c );; void CStudent: display(int c ) fun1(c); cout “num”numendl; cout “score”scorenum=9011; int b; cinb; (*p1).display( b ); delete p1; return 0; 私有成員函數(shù)的使用私有成員函數(shù)的使用stud1. display( );消息消息對象對象方法方法4.2 類的默認(rèn)成員函數(shù)及其定義類的默認(rèn)成員函數(shù)及其定義v默認(rèn)構(gòu)造函數(shù)默認(rèn)構(gòu)造函數(shù)v默認(rèn)拷貝構(gòu)造函數(shù)默認(rèn)拷貝構(gòu)造函數(shù)v默認(rèn)析構(gòu)函數(shù)默認(rèn)析構(gòu)函數(shù)v默認(rèn)賦值運(yùn)算符函數(shù)默認(rèn)賦值運(yùn)算符函數(shù)v默認(rèn)取地址運(yùn)算符函數(shù)默
18、認(rèn)取地址運(yùn)算符函數(shù) 是編譯器自動添加的是編譯器自動添加的.當(dāng)功能不滿足要求當(dāng)功能不滿足要求時用戶可以按要求重新自定義這些函數(shù)時用戶可以按要求重新自定義這些函數(shù).構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù) C+ 的目標(biāo)是使得使用類與使用基本的內(nèi)置類型盡可能相同。的目標(biāo)是使得使用類與使用基本的內(nèi)置類型盡可能相同。 即要創(chuàng)建對象,即要創(chuàng)建對象,可以定義類變量,也可以使用可以定義類變量,也可以使用new為類對象分配存儲空間??梢詫ο笞鳛楹瘮?shù)的參數(shù)為類對象分配存儲空間??梢詫ο笞鳛楹瘮?shù)的參數(shù)和返回值,也可以將一個對象賦給另一個,和返回值,也可以將一個對象賦給另一個, 初始化對象初始化對象-創(chuàng)建對象時對它的
19、數(shù)據(jù)成員進(jìn)行初始化。創(chuàng)建對象時對它的數(shù)據(jù)成員進(jìn)行初始化。 一種可能的初始化方法:一種可能的初始化方法: 對類的公有數(shù)據(jù)成員,可象結(jié)構(gòu)體變量一樣初始化。對類的公有數(shù)據(jù)成員,可象結(jié)構(gòu)體變量一樣初始化。 (但這違背了類信息隱藏的初衷)(但這違背了類信息隱藏的初衷) Cstudent stu1= 97101,”wangdali”, “男男”; 但往往存在私有數(shù)據(jù)成員,程序不能直接訪問它們,而只能但往往存在私有數(shù)據(jù)成員,程序不能直接訪問它們,而只能通過成員函數(shù)來訪問這些數(shù)據(jù)成員,因此要設(shè)計合適的成員函通過成員函數(shù)來訪問這些數(shù)據(jù)成員,因此要設(shè)計合適的成員函數(shù),才能成功的將對象初始化。數(shù),才能成功的將對象初
20、始化。 為此,為此,C+ 提供了特殊的成員函數(shù)提供了特殊的成員函數(shù)-構(gòu)造函數(shù)構(gòu)造函數(shù)。一、構(gòu)造函數(shù)一、構(gòu)造函數(shù)v功能:構(gòu)造函數(shù)是一種特殊的成員函數(shù),它主要用于對對象成功能:構(gòu)造函數(shù)是一種特殊的成員函數(shù),它主要用于對對象成員進(jìn)行初始化。員進(jìn)行初始化。(給具體數(shù)值,或給指針成員分配空間等)(給具體數(shù)值,或給指針成員分配空間等)v聲明和定義構(gòu)造函數(shù)聲明和定義構(gòu)造函數(shù):(具有一些特殊的性質(zhì))具有一些特殊的性質(zhì))構(gòu)造函數(shù)的名字必須與類名相同。構(gòu)造函數(shù)的名字必須與類名相同。 構(gòu)造函數(shù)可以有任意類型的參數(shù),但不能具有返回值。構(gòu)造函數(shù)可以有任意類型的參數(shù),但不能具有返回值。v構(gòu)造函數(shù)的使用構(gòu)造函數(shù)的使用在創(chuàng)建
21、對象時,系統(tǒng)會自動地調(diào)用構(gòu)造函數(shù)。在創(chuàng)建對象時,系統(tǒng)會自動地調(diào)用構(gòu)造函數(shù)。 從而保證了先初始化后訪問的順序。從而保證了先初始化后訪問的順序。例如:例如:class cdemo cdemo( ) ;例如:例如:class cdemo cdemo( ); ; cdemo:cdemo( ,.) v例1vclass complexvprivate:vdouble real , imag;vpublic:vcomplex( double r,double i)v real=r; imag=i; vdouble abscomplex三v double t;v t=real*real+imag*imag;v
22、 return sqrt(t);vv;vvoid main三vcomplex A(1.1 , 2.2); /定義類的對象A時調(diào)用構(gòu)造函數(shù)complexv complex b(5.6,8.9);vcout” abs of complex A=” A . abscomplex( ) endl;v形參不要與數(shù)形參不要與數(shù)據(jù)成員同名據(jù)成員同名v例2 沒有參數(shù)的構(gòu)造函數(shù)vclass complexvprivate:vdouble real , imag;vpublic:vcomplex( )v real=6; imag=8; vdouble abscomplex三v double t;v t=real*
23、real+imag*imag;v return sqrt(t);vv;vvoid main三vcomplex A;/定義類的對象A時調(diào)用構(gòu)造函數(shù)complexvcout” abs of complex A=” A . abscomplex( ) endl;vv例3 用初始化列表對簡單的數(shù)據(jù)成員進(jìn)行初始化vclass complexvprivate:vdouble real , imag;vpublic:vcomplex(double r,double i) : real(r), imag(i) v ; vdouble abscomplex三v vv;vvoid main三vcomplex A(
24、6.0,8.0) ;/定義類的對象A時調(diào)用構(gòu)造函數(shù)complexvcout” abs of complex A=” A . abscomplex( ) endl;v說明:1. 構(gòu)造函數(shù)的名字必須與類名相同,否則將被當(dāng)作一般的成員函數(shù)來處理。一般聲明為public 。2. 構(gòu)造函數(shù)也可采用初始化列表對簡單的數(shù)據(jù)成員進(jìn)行初始化,但數(shù)組和指針等成員的初始化應(yīng)在構(gòu)造函數(shù)體中書寫。 初始化列表只能用于類的構(gòu)造函數(shù)。3. 構(gòu)造函數(shù)不能像其它成員函數(shù)那樣被顯式地調(diào)用,它是在創(chuàng)建對象的同時系統(tǒng)自動調(diào)用一次。4. C+提供兩種調(diào)用形式: 隱式調(diào)用構(gòu)造函數(shù): complex A(1.1 , 2.2); 顯式的調(diào)用
25、構(gòu)造函數(shù): complex A=comples(1.1 , 2.2); 無參構(gòu)造函數(shù)調(diào)用形式: complex A;5. 在實際應(yīng)用中,通常需要給每個類定義構(gòu)造函數(shù)。如果沒有給類定義構(gòu)造函數(shù),則編譯系統(tǒng)自動地添加一個默認(rèn)的構(gòu)造函數(shù)。形如: complex:complex( ) ; /是一個無參空函數(shù)。 一旦自定義了構(gòu)造函數(shù),系統(tǒng)就不再生成默認(rèn)的構(gòu)造函數(shù)了。class complexprivate:double real , imag;public: void set (double r,double i) real=r;imag=i;double abscomplex三三 double t;
26、t=real*real+imag*imag; return sqrt(t);void main三三complex A;/定義類的對象定義類的對象A時調(diào)用默認(rèn)構(gòu)造函數(shù)時調(diào)用默認(rèn)構(gòu)造函數(shù)complex A.set(1.1,2.2);cout” abs of complex A=” A . abscomplex( ) endl;二、構(gòu)造函數(shù)的重載二、構(gòu)造函數(shù)的重載v一個類中可以定義多個構(gòu)造函數(shù),以便對類對象提一個類中可以定義多個構(gòu)造函數(shù),以便對類對象提供不同的初始化方法。供不同的初始化方法。v構(gòu)造函數(shù)的名字相同,參數(shù)的個數(shù)或類型不同。構(gòu)造函數(shù)的名字相同,參數(shù)的個數(shù)或類型不同。class comple
27、xprivate:double real , imag;public: complex( ) real=6; imag=8; complex(double r,double i) real=r; imag=I; ; int main三三 complex a , b(1.1,2.2) ; 定義一個對象時,只能執(zhí)定義一個對象時,只能執(zhí)行其中一個構(gòu)造函數(shù)。行其中一個構(gòu)造函數(shù)。例:定義了構(gòu)造函數(shù),但無默認(rèn)構(gòu)造函數(shù)時例:定義了構(gòu)造函數(shù),但無默認(rèn)構(gòu)造函數(shù)時class complexprivate:double real , imag;public: complex(double a ) real= a;
28、imag=a; complex(double r,double i) real=r; imag=I; ; int main三三 complex a(4.0) ,b(1.1,2.2) ; complex c; v為類定義了非默認(rèn)構(gòu)造函數(shù)后,程序為類定義了非默認(rèn)構(gòu)造函數(shù)后,程序員一般必須為它提供默認(rèn)構(gòu)造函數(shù)。這員一般必須為它提供默認(rèn)構(gòu)造函數(shù)。這樣可禁止創(chuàng)建未初始化的對象。樣可禁止創(chuàng)建未初始化的對象。三、使用默認(rèn)參數(shù)的構(gòu)造函數(shù)三、使用默認(rèn)參數(shù)的構(gòu)造函數(shù)v對于帶參數(shù)的構(gòu)造函數(shù)對于帶參數(shù)的構(gòu)造函數(shù),在定義對象時必須給構(gòu)在定義對象時必須給構(gòu)造函數(shù)傳遞參數(shù),否則構(gòu)造函數(shù)將不被執(zhí)行造函數(shù)傳遞參數(shù),否則構(gòu)造函數(shù)
29、將不被執(zhí)行。但但在實際使用中,有些構(gòu)造函數(shù)的參數(shù)值通常是不在實際使用中,有些構(gòu)造函數(shù)的參數(shù)值通常是不變的,只有在特殊情況下才需要改變它的參數(shù)值,變的,只有在特殊情況下才需要改變它的參數(shù)值,這時可以將其定義成帶默認(rèn)參數(shù)的構(gòu)造函數(shù)這時可以將其定義成帶默認(rèn)參數(shù)的構(gòu)造函數(shù)。v在聲明構(gòu)造函數(shù)時指定默認(rèn)參數(shù)在聲明構(gòu)造函數(shù)時指定默認(rèn)參數(shù) Complex ( double r=1 , double i=1);相當(dāng)于多個重載的構(gòu)造函數(shù)。相當(dāng)于多個重載的構(gòu)造函數(shù)。 重載和默認(rèn)參數(shù)的構(gòu)重載和默認(rèn)參數(shù)的構(gòu)造函數(shù)不應(yīng)同時使用,造函數(shù)不應(yīng)同時使用,因容易出現(xiàn)二義性。因容易出現(xiàn)二義性。class complexprivat
30、e:double real , imag;public: complex(double r=1,double i=1);; complex:complex(double r,double i) real=r; imag=I; int main三三 complex a , b(2), c(3,4); 四、析構(gòu)函數(shù)四、析構(gòu)函數(shù)v析構(gòu)函數(shù)也是一種特殊的成員函數(shù)析構(gòu)函數(shù)也是一種特殊的成員函數(shù).它執(zhí)行與構(gòu)造函數(shù)相反的它執(zhí)行與構(gòu)造函數(shù)相反的操作操作,通常用于執(zhí)行一些清理任務(wù)通常用于執(zhí)行一些清理任務(wù),如釋放分配給對象的內(nèi)存如釋放分配給對象的內(nèi)存空間等??臻g等。v析構(gòu)函數(shù)有以下一些特點析構(gòu)函數(shù)有以下一些特點:
31、析構(gòu)函數(shù)與構(gòu)造函數(shù)名字相同析構(gòu)函數(shù)與構(gòu)造函數(shù)名字相同,但它前面必須加一個波浪號但它前面必須加一個波浪號();析構(gòu)函數(shù)沒有參數(shù)析構(gòu)函數(shù)沒有參數(shù),也沒有返回值也沒有返回值,而且不能重載而且不能重載,因此在一因此在一個類中只能有一個析構(gòu)函數(shù)個類中只能有一個析構(gòu)函數(shù);當(dāng)撤消對象時(對象生命周期結(jié)束時)當(dāng)撤消對象時(對象生命周期結(jié)束時),系統(tǒng)會自動地調(diào)用析構(gòu)函系統(tǒng)會自動地調(diào)用析構(gòu)函數(shù)。數(shù)。例:class complex double real, imag; public: complex(double r=0.0,double i=0.0) coutconstructionendl; real=r;im
32、ag=i; complex三 coutdestructionendl; double abscomplex三 return sqrt(real*real+imag*imag); ; int main三 complex A(1.1 , 2.2); coutabs of complex A=三endl; return 0; construction destruction結(jié)果:結(jié)果:v析構(gòu)函數(shù)的作用并不是刪除對象,而是在撤銷對析構(gòu)函數(shù)的作用并不是刪除對象,而是在撤銷對象占用的內(nèi)存之前完成一些清理工作象占用的內(nèi)存之前完成一些清理工作-釋放資源。釋放資源?;蛴脩粝M谧詈笠淮问褂脤ο笾笏鶊?zhí)行的任或用
33、戶希望在最后一次使用對象之后所執(zhí)行的任何操作。何操作。v每個類必須有一個析構(gòu)函數(shù)。若沒有顯式地為一每個類必須有一個析構(gòu)函數(shù)。若沒有顯式地為一個類定義析構(gòu)函數(shù),編譯系統(tǒng)會自動地添加一個個類定義析構(gòu)函數(shù),編譯系統(tǒng)會自動地添加一個缺省的析構(gòu)函數(shù)。如:缺省的析構(gòu)函數(shù)。如:v complex三三v對于大多數(shù)類而言,缺省的析構(gòu)函數(shù)已經(jīng)足夠了。對于大多數(shù)類而言,缺省的析構(gòu)函數(shù)已經(jīng)足夠了。但是,如果在一個對象完成其操作之前需要做一但是,如果在一個對象完成其操作之前需要做一些內(nèi)部處理,則應(yīng)該顯式地定義析構(gòu)函數(shù),例如:些內(nèi)部處理,則應(yīng)該顯式地定義析構(gòu)函數(shù),例如:class dataprivate: int *p;
34、public:data(int a) p=new int; *p=a; data三 delete p; ; int main三三 data x(6); return 0;例例1:釋放內(nèi)存釋放內(nèi)存class string_dataprivate: char *str;publie:string_data(char *s) str=new charstrlen(s)+1; strcpy(str , s);string_data三 delete str; /; int main三三 string_data x(“abc”); / return 0;例例2:釋放內(nèi)存:釋放內(nèi)存同一類存儲類別的對象的構(gòu)造
35、和析構(gòu)的執(zhí)行順序class XYZ;int main三XYZ A,B; 對象對象A A對象對象B B構(gòu)構(gòu)造造析析構(gòu)構(gòu)調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序先構(gòu)造的后析構(gòu),后構(gòu)造的先析構(gòu)先構(gòu)造的后析構(gòu),后構(gòu)造的先析構(gòu) 對象的存儲類別不同,生命周期不同對象的存儲類別不同,生命周期不同v全局對象:在主函數(shù)之前構(gòu)造,主函數(shù)結(jié)束或調(diào)用全局對象:在主函數(shù)之前構(gòu)造,主函數(shù)結(jié)束或調(diào)用exit(0)時,析構(gòu)。時,析構(gòu)。v局部自動對象局部自動對象:函數(shù)調(diào)用,建立對象時構(gòu)造,函數(shù)結(jié)函數(shù)調(diào)用,建立對象時構(gòu)造,函數(shù)結(jié)束時析構(gòu)。多次調(diào)用函數(shù),就多次構(gòu)造和析構(gòu)。束時析構(gòu)。多次調(diào)用函數(shù),就多次構(gòu)造和析構(gòu)。v
36、局部靜態(tài)對象:程序第一次調(diào)用函數(shù)時構(gòu)造,主函局部靜態(tài)對象:程序第一次調(diào)用函數(shù)時構(gòu)造,主函數(shù)結(jié)束或調(diào)用數(shù)結(jié)束或調(diào)用exit(0)時,析構(gòu)。其間,調(diào)用函數(shù)不時,析構(gòu)。其間,調(diào)用函數(shù)不構(gòu)造也不析構(gòu)。構(gòu)造也不析構(gòu)。void fun三static cstudent b; cstudent c;main( ) coutbeginendl; fun三; cstudent *p1; p1=new cstudent; delete p1; fun三;例:構(gòu)造和析構(gòu)順序例:構(gòu)造和析構(gòu)順序 #include iostreamusing namespace std;class cstudentint num; pub
37、lic: cstudent 三三; cstudent三三 ; stu1;cstudent:cstudent三三 cout構(gòu)造函數(shù)構(gòu)造函數(shù)a=ma;this-b=mb;v我們可以直接顯式的使用我們可以直接顯式的使用this 指針指針 例例 4.11 v構(gòu)造函數(shù)等特殊成員函數(shù)中也有構(gòu)造函數(shù)等特殊成員函數(shù)中也有this指針。指針。v成員函數(shù)內(nèi)部訪問其他成員函數(shù),成員函數(shù)內(nèi)部訪問其他成員函數(shù),this指針將被指針將被逐級傳遞下去。逐級傳遞下去。v this 指針是指針是const 指針,即編譯器規(guī)定不允許在指針,即編譯器規(guī)定不允許在程序中修改它的值。程序中修改它的值。當(dāng)形式參數(shù)與數(shù)據(jù)成員同名時,需要加
38、當(dāng)形式參數(shù)與數(shù)據(jù)成員同名時,需要加thisthis:class ABCclass ABCint x;int x;public:public:void set(int x)void set(int x) this-x = x; / this-x = x; /或或( (* *this).x=x;this).x=x;void outvoid out三三 coutx; coutx; ;int mainint main三三 ABC p;ABC p;p.set(5);p.set(5);三三; ;return 0;return 0; C+C+對變量的檢查順序:局部變量、類的數(shù)據(jù)成員、全局變量。對變量的檢查順
39、序:局部變量、類的數(shù)據(jù)成員、全局變量。4.3.2 對象的訪問方法與規(guī)則對象的訪問方法與規(guī)則對象的訪問:指對對象成員的訪問。對象的訪問:指對對象成員的訪問。1.訪問方法:簡單訪問、直接訪問、間接訪問。訪問方法:簡單訪問、直接訪問、間接訪問。 2.訪問規(guī)則:根據(jù)訪問位置制訂不同訪問規(guī)則內(nèi)部訪問及規(guī)則:在成員函數(shù)里面對本類對象的 訪問當(dāng)前對象的訪問:可直接、間接、簡單本類其他對象的訪問:可直接、間接內(nèi)部訪問可方位對象的所有成員。外部訪問:在全局函數(shù)里訪問任何類的對象成員?;蛟谀愁惖某蓡T函數(shù)里訪問其它類的對象的成員。間接、直接只能訪問公有成員v例:例:class demo int a; fun1( )
40、; public: demo(int c); fun2 (demo b ); ;demo:demo(int c) a =c;demo:fun1( ) coutafun(d1); d1.a=9; /錯誤錯誤4.3.3 對象的使用對象的使用v point p1 ,p2; p2=p1; /對象的賦值對象的賦值 point p3(p1), p4=p1; /對象拷貝對象拷貝 point & p5=p1; /引用引用 point *p =&p1; /指針指針v通過函數(shù)參數(shù)傳遞對象通過函數(shù)參數(shù)傳遞對象函數(shù)形參為普通對象函數(shù)形參為普通對象函數(shù)形參為對象指針函數(shù)形參為對象指針函數(shù)形參為對象的引用函數(shù)形參為對象的
41、引用見書上例,見書上例,4.16 ,4.17 v函數(shù)返回對象函數(shù)返回對象函數(shù)返回普通對象函數(shù)返回普通對象函數(shù)返回對象指針函數(shù)返回對象指針 :被取地址對象必須要有:被取地址對象必須要有較長的生存期。較長的生存期。函數(shù)返回對象的引用:被返回對象必須要有函數(shù)返回對象的引用:被返回對象必須要有較長的生存期。較長的生存期。見書上例,見書上例,4.19 ,4.20 4.3.4 對象數(shù)組對象數(shù)組v指所有數(shù)組元素都是對象的數(shù)組。指所有數(shù)組元素都是對象的數(shù)組。 若一個類有若干個對象,我們把這一系列的對若一個類有若干個對象,我們把這一系列的對象用一個數(shù)組來存放。象用一個數(shù)組來存放。 v建立對象數(shù)組時,每一個元素都
42、要調(diào)用構(gòu)造函建立對象數(shù)組時,每一個元素都要調(diào)用構(gòu)造函數(shù)初始化。數(shù)初始化。 靜態(tài)創(chuàng)建數(shù)組:要提供合適的初始化實參。靜態(tài)創(chuàng)建數(shù)組:要提供合適的初始化實參。 動態(tài)創(chuàng)建類對象數(shù)組。動態(tài)創(chuàng)建類對象數(shù)組。v數(shù)組元素的訪問方法:下標(biāo)法、地址法、指針數(shù)組元素的訪問方法:下標(biāo)法、地址法、指針法。法。指向?qū)ο蟮闹羔樦赶驅(qū)ο蟮闹羔樧⒁獬跏蓟瘜ο髷?shù)組的方法注意初始化對象數(shù)組的方法class complex private: double real , imag; public: complex(double a ) real= a; imag=a; complex(double r, double i) real=r
43、; imag=i; complex 三三 real=imag=0.0; double abscomplex三三 double t; t=real*real+imag*imag; return sqrt(t); ; 例:定義并初始化對象數(shù)組例:定義并初始化對象數(shù)組 complex demo15;complex demo35=1,4,2,3,6;complex demo25= complex(1), complex三三, complex(1.1,2.2) ; cout靜態(tài)成員函數(shù)名三;靜態(tài)成員函數(shù)名三; stud1.average三三; pstud1-average三三;v使用靜態(tài)成員函數(shù)的另一個
44、原因是:可以用它在使用靜態(tài)成員函數(shù)的另一個原因是:可以用它在建立任何對象之前處理靜態(tài)數(shù)據(jù)成員,這是普通建立任何對象之前處理靜態(tài)數(shù)據(jù)成員,這是普通成員函數(shù)不能實現(xiàn)的功能。成員函數(shù)不能實現(xiàn)的功能。v比全局變量要安全。比全局變量要安全。例:見書例:見書138頁例頁例4.5 數(shù)據(jù)的保護(hù)數(shù)據(jù)的保護(hù)v有些數(shù)據(jù),可以在不同場合通過不同途徑訪問,為有些數(shù)據(jù),可以在不同場合通過不同途徑訪問,為了保證數(shù)據(jù)的安全,即不被任意修改,可以使用了保證數(shù)據(jù)的安全,即不被任意修改,可以使用const 來對其屬性進(jìn)行限定。來對其屬性進(jìn)行限定。v有關(guān)類的數(shù)據(jù)保護(hù)的限定的幾種形式:有關(guān)類的數(shù)據(jù)保護(hù)的限定的幾種形式:v常成員常成員v
45、常對象常對象v對象的常引用對象的常引用v指向?qū)ο蟮某V羔樦赶驅(qū)ο蟮某V羔樦赶虺ο蟮闹羔樧兞恐赶虺ο蟮闹羔樧兞亢蛯ο笥嘘P(guān)的函數(shù)參數(shù)和對象有關(guān)的函數(shù)參數(shù)保護(hù)對象內(nèi)容不被修改保護(hù)對象內(nèi)容不被修改(一)常成員(一)常成員1、常數(shù)據(jù)成員、常數(shù)據(jù)成員v用用const 來聲明常數(shù)據(jù)成員。其值不能改變。不能來聲明常數(shù)據(jù)成員。其值不能改變。不能被賦值。被賦值。v只能通過構(gòu)造函數(shù)的參數(shù)初始化表對常數(shù)據(jù)成員進(jìn)只能通過構(gòu)造函數(shù)的參數(shù)初始化表對常數(shù)據(jù)成員進(jìn)行初始化。行初始化。例:例:class Time const int hour; int sec; public: Time (int h) :hour(h) s
46、ec=0; Time( int h) hour =h; sec=0;void f三三 couthour; hour=9; sec=30; ; int main( ) Time a1(8), a2(9); a1.f三三; a2.f三三; return 0 2、常成員函數(shù)、常成員函數(shù)v格式:格式: 返回類型返回類型 成員函數(shù)名(形參)成員函數(shù)名(形參)const 聲明和定義函數(shù)時都要加聲明和定義函數(shù)時都要加const ,調(diào)用時不需加。調(diào)用時不需加。v功能特點:功能特點:只能讀本類中的數(shù)據(jù)成員而不能修改它們。只能讀本類中的數(shù)據(jù)成員而不能修改它們。除非是可變的數(shù)據(jù)成員:除非是可變的數(shù)據(jù)成員:mutab
47、le int count; ,可用常,可用常成員函數(shù)來修改它的值。成員函數(shù)來修改它的值。常成員函數(shù)不能調(diào)用非常成員函數(shù)。(防止間接修改)常成員函數(shù)不能調(diào)用非常成員函數(shù)。(防止間接修改) 常成員是從類的角度,在類內(nèi)聲明常成員是從類的角度,在類內(nèi)聲明成員的成員的const屬性屬性(二)常對象(二)常對象v定義對象時指定對象為常對象。定義對象時指定對象為常對象。v格式:格式: 類名類名 const 對象名對象名 (實參表列)(實參表列); const 類名類名 對象名對象名 (實參表列)(實參表列);v不允許修改常對象中的數(shù)據(jù)成員的值。不允許修改常對象中的數(shù)據(jù)成員的值。 常對象的數(shù)據(jù)成員為常變量且必
48、須要有初值。常對象的數(shù)據(jù)成員為常變量且必須要有初值。(由構(gòu)造函數(shù)初始化)由構(gòu)造函數(shù)初始化)v外界只能調(diào)用常對象的常成員函數(shù)(除了由系統(tǒng)自動調(diào)用的隱式的外界只能調(diào)用常對象的常成員函數(shù)(除了由系統(tǒng)自動調(diào)用的隱式的構(gòu)造函數(shù)和析構(gòu)函數(shù)),以防止修改對象中的數(shù)據(jù)成員的值。構(gòu)造函數(shù)和析構(gòu)函數(shù)),以防止修改對象中的數(shù)據(jù)成員的值。 因常成員函數(shù)可以引用數(shù)據(jù)成員,但不會改變數(shù)據(jù)成員的值。因常成員函數(shù)可以引用數(shù)據(jù)成員,但不會改變數(shù)據(jù)成員的值。可變的數(shù)據(jù)成員:可變的數(shù)據(jù)成員:mutable int count; 可用常成員函數(shù)來修改它的值??捎贸3蓡T函數(shù)來修改它的值。例:例:class d int i; publi
49、c: int a; d( )i=0;a=9; s( )i=6; f( ) const; ;d :f三三 constint q; q=i; coutq; int main( )const d d1;d1.f( );coutd1.a; d1.s( ); d1.a=4; d d2; d2.f三三;coutd2.a; d2.s三三;d2.a=4;return 0;(三)對象的常引用(三)對象的常引用v格式:格式:const 類名類名 &引用名引用名=對象;對象;v不能通過該引用改變對象。不能通過該引用改變對象。v常用于函數(shù)形參,和指向常對象的指針變量一樣,常用于函數(shù)形參,和指向常對象的指針變量一樣,使
50、函數(shù)執(zhí)行過程中,不能通過形參改變實參的值。使函數(shù)執(zhí)行過程中,不能通過形參改變實參的值。 常引用、指向常對象的指針常引用、指向常對象的指針和常成員函數(shù)可保證調(diào)用對和常成員函數(shù)可保證調(diào)用對象不被修改象不被修改(四)、指向常對象的指針變量(四)、指向常對象的指針變量v指向常對象的指針變量即可指向常對象,也可指指向常對象的指針變量即可指向常對象,也可指向非常對象。不能通過該指針改變對象。向非常對象。不能通過該指針改變對象。v只能用指向常對象的指針變量指向常對象。只能用指向常對象的指針變量指向常對象。v該指針變量本身可以改變。該指針變量本身可以改變。v常用于函數(shù)形參,目的是保護(hù)形參指針?biāo)赶虻某S糜诤瘮?shù)
51、形參,目的是保護(hù)形參指針?biāo)赶虻膶ο?,使它在函?shù)執(zhí)行過程中不被修改。即只想對象,使它在函數(shù)執(zhí)行過程中不被修改。即只想在函數(shù)中引用該對象,而不想改變它。在函數(shù)中引用該對象,而不想改變它。 例:例:Time t1(10,12,15); const Time *p1=&t1; t1.hour=18; (*p1).hour=18;例:例:const Time t2(10,12,15); const Time *p2=&t2; t2.hour=18; (*p2).hour=18; 成員函數(shù)數(shù)據(jù)成員非const 成員函數(shù)const 成員函數(shù)非const 數(shù)據(jù)成員可以使用,可以改變值 可以使用,不可以改變值
52、const 數(shù)據(jù)成員可以使用,不可以改變值 可以使用,不可以改變值 |常對象和常成員對比常對象和常成員對比 常對象是在類外定義對象時,定義為常對象的。當(dāng)然也常對象是在類外定義對象時,定義為常對象的。當(dāng)然也可定義該類的非常對象??啥x該類的非常對象。 無論類內(nèi)對成員如何聲明,該常對象的數(shù)據(jù)成員全轉(zhuǎn)變無論類內(nèi)對成員如何聲明,該常對象的數(shù)據(jù)成員全轉(zhuǎn)變?yōu)槌W兞浚瘮?shù)成員的屬性不變。為常變量,函數(shù)成員的屬性不變。 若想引用常對象的數(shù)據(jù)成員,在類聲明時必須聲明有若想引用常對象的數(shù)據(jù)成員,在類聲明時必須聲明有常成員函數(shù)。常成員函數(shù)。 具有常成員的類即可定義非常對象也可定義常對象。具有常成員的類即可定義非常對
53、象也可定義常對象。 完全不具備常成員的類即可定義非常對象也可定義常對完全不具備常成員的類即可定義非常對象也可定義常對象,但此時常對象沒法使用。象,但此時常對象沒法使用。 常對象非const 成員函數(shù)const 成員函數(shù) const對象的數(shù)據(jù)成員外部不能調(diào)用可使用,可改非const數(shù)據(jù)成員的值外部可以調(diào)用,可使用,不可改變值v如何利用常對象和常成員如何利用常對象和常成員v當(dāng)類中只有部分?jǐn)?shù)據(jù)成員的值允許改變時,可當(dāng)類中只有部分?jǐn)?shù)據(jù)成員的值允許改變時,可將這部分?jǐn)?shù)據(jù)成員聲明為將這部分?jǐn)?shù)據(jù)成員聲明為const 。v若所有數(shù)據(jù)成員的值都不許改變,可將所有數(shù)若所有數(shù)據(jù)成員的值都不許改變,可將所有數(shù)據(jù)成員聲
54、明為據(jù)成員聲明為const,或?qū)ο舐暶鳛槌ο?。或?qū)ο舐暶鳛槌ο?。通過常成員函數(shù)來引用常對象中數(shù)據(jù)成員。通過常成員函數(shù)來引用常對象中數(shù)據(jù)成員。(四)指向?qū)ο蟮某V羔槪ㄋ模┲赶驅(qū)ο蟮某V羔榲格式:類名格式:類名 * const 指針變量名指針變量名 =對象地址;對象地址;v指針值始終保持為其初始化值,不能改變,即其指針值始終保持為其初始化值,不能改變,即其指向始終不變。指向始終不變。v可將一個指針變量固定的和一個對象相聯(lián)系。可將一個指針變量固定的和一個對象相聯(lián)系。v往往用常指針作為函數(shù)的形參,目的是不允許函往往用常指針作為函數(shù)的形參,目的是不允許函數(shù)執(zhí)行中改變指針變量的值,使其始終指向原來
55、數(shù)執(zhí)行中改變指針變量的值,使其始終指向原來的對象。的對象。v例:例:Time t1(10,12,15),t2; Time *const ptr1=&t1;v對所指對象的使用沒有限制。對所指對象的使用沒有限制。 (五)指向常對象的指針變量(五)指向常對象的指針變量 1、指向常變量的指針變量、指向常變量的指針變量v格式:格式: const 類型名類型名 *指針變量名;指針變量名;v可用其指向:常變量可用其指向:常變量 非常變量非常變量v不能通過該指針改變其所指變量的值。不能通過該指針改變其所指變量的值。v該指針可以指向不同的變量。該指針可以指向不同的變量。v例:例: int a; const in
56、t b=7; const int *p;p=&a; *p=9; p=&b; *p=8; int c; c=*p; v當(dāng)用指針變量作函數(shù)形參時,形參和實參的對應(yīng)關(guān)系當(dāng)用指針變量作函數(shù)形參時,形參和實參的對應(yīng)關(guān)系 形參形參 實參實參 指向非指向非const 型變量的指針型變量的指針 非非const變量的地址變量的地址 指向指向const型變量的指針型變量的指針 const變量的地址變量的地址 非非const變量的地址變量的地址函數(shù)中不能通過形參改變其所指實參的值函數(shù)中不能通過形參改變其所指實參的值 例:例:void fun1( char *p); char a=q; fun1 (&a); void
57、 fun1(char *p) *p=w;例:例:void fun2(const char *p); char a=t; fun2 (&a); const char b=r; fun2(&b); void fun2 (const char *p) cout*p; 2、指向常對象的指針變量、指向常對象的指針變量v只能用指向常對象的指針變量指向常對象。只能用指向常對象的指針變量指向常對象。v指向常對象的指針變量即可指向常對象,也可指指向常對象的指針變量即可指向常對象,也可指向非常對象。不能通過該指針改變對象。向非常對象。不能通過該指針改變對象。v該指針變量本身可以改變。該指針變量本身可以改變。v常用
58、于函數(shù)形參,目的是保護(hù)形參指針?biāo)赶虻某S糜诤瘮?shù)形參,目的是保護(hù)形參指針?biāo)赶虻膶ο?,使它在函?shù)執(zhí)行過程中不被修改。即只想對象,使它在函數(shù)執(zhí)行過程中不被修改。即只想在函數(shù)中引用該對象,而不想改變它。在函數(shù)中引用該對象,而不想改變它。 例:例:Time t1(10,12,15); const Time *p1=&t1; t1.hour=18; (*p1).hour=18;例:例:const Time t2(10,12,15); const Time *p2=&t2; t2.hour=18; (*p2).hour=18; fun1 (ABC p) fun2 (ABC *p) fun3 (const
59、 ABC *P) /指向常對象的指針指向常對象的指針 fun4 (ABC *const p) /常指針常指針 fun5(ABC &p) /引用引用 fun6 (const ABC &p)( /常引用常引用int main三三 ABC p3; fun1(p3);/以以“值方式值方式”傳遞對象,傳遞對象,p3不被修改不被修改 fun2(&p3);/以以“指針方式指針方式”傳遞對象,傳遞對象,p3可被修改可被修改 fun3(&p3);/以以“指常指針方式指常指針方式”傳遞對象,傳遞對象,p3不可被修改不可被修改 fun4(&p3);/以以“常指針方式常指針方式”傳遞對象,傳遞對象,p3可被修改可被修
60、改 fun5(p3); /以以“引用方式引用方式”傳遞對象,傳遞對象,p3可被修改可被修改 fun6(p3); /以以“常引用方式常引用方式”傳遞對象,傳遞對象,p3不可被修改不可被修改向函數(shù)傳遞對象向函數(shù)傳遞對象 (六)、指向?qū)ο蟪蓡T的指針(六)、指向?qū)ο蟪蓡T的指針對象成員的指針對象成員的指針指向?qū)ο蟪蓡T的指針變量指向?qū)ο蟪蓡T的指針變量 1、數(shù)據(jù)成員(公有)、數(shù)據(jù)成員(公有) 例:例:double *p1=&; *p1=6; 2、函數(shù)成員、函數(shù)成員 (公有)(公有) 格式:數(shù)據(jù)類型名格式:數(shù)據(jù)類型名 (類名(類名: *指針變量名)指針變量名)(參數(shù)列表參數(shù)列表); 函數(shù)返回值類型函數(shù)返回值類
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商場消防工程施工合同5篇
- 《6.2垂直關(guān)系的性質(zhì)》講義
- 2023年高考全國乙卷理科綜合真題(原卷版)
- 避震山地車市場分析及競爭策略分析報告
- 《天然藥物學(xué)》課程標(biāo)準(zhǔn)
- 第五章 生活中的軸對稱單元練習(xí) 2024-2025學(xué)年北師大版七年級數(shù)學(xué)下冊
- 合伙人項目合作合同范本
- 衛(wèi)浴工程購銷合同范例
- 個性簡歷自我評價簡短
- 個人簡歷幼師自薦信
- 2024解析:第十二章機(jī)械效率-講核心(原卷版)
- 2023年國家公務(wù)員錄用考試《申論》真題(副省卷)及答案解析
- 2023年海南省公務(wù)員錄用考試《行測》真題卷及答案解析
- 2024-2030年中國語言培訓(xùn)行業(yè)競爭分析及發(fā)展策略建議報告版
- 2024-2030年中國醫(yī)療器械維修設(shè)備行業(yè)供需狀況及發(fā)展策略分析報告
- 中國心力衰竭診斷和治療指南2024解讀(完整版)
- 女性健康知識講座課件
- DB11T 1787-2020 二氧化碳排放核算和報告要求 其他行業(yè)
- 企業(yè)網(wǎng)絡(luò)安全管理規(guī)范作業(yè)指導(dǎo)書
- 2024年大學(xué)試題(計算機(jī)科學(xué))-人工智能考試近5年真題集錦(頻考類試題)帶答案
- 高空作業(yè)的技術(shù)交底
評論
0/150
提交評論