




已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-1-,8.1 類是一種數(shù)據(jù)類型,數(shù)據(jù)類型約束了變量所能參加的運(yùn)算范圍。例如,整型變量可以進(jìn)行取模“%”運(yùn)算,而實(shí)型變量則不可以進(jìn)行該運(yùn)算; 數(shù)據(jù)類型限定了變量所能取到的數(shù)值范圍。例如,整型變量可以取值為1,2, 100,,而不能取值3.1415這樣的實(shí)型數(shù)。 在C+中,類實(shí)際上相當(dāng)于一種用戶自定義的數(shù)據(jù)類型,對(duì)象就是該數(shù)據(jù)類型的一個(gè)變量; 類-數(shù)據(jù)類型 對(duì)象-變量,-2-,8.2 類的定義,一個(gè)類表示現(xiàn)實(shí)生活中的一類事物,比如“學(xué)生”. 事物有相應(yīng)的特征或?qū)傩?,它們就是類的成員數(shù)據(jù); 事物可能有行為動(dòng)作,也可能被某些行為動(dòng)作所操作,這些都用函數(shù)來(lái)實(shí)現(xiàn),是構(gòu)成類的函數(shù)成員,或者叫成員函數(shù)。,-3-,8.2 類的定義,類的聲明具體說(shuō)明類的組成,聲明類的語(yǔ)法形式為: class 類的名稱 public: 公有成員數(shù)據(jù); 公有成員函數(shù); protected: 保護(hù)成員數(shù)據(jù); 保護(hù)成員函數(shù); private: 私有成員數(shù)據(jù); 私有成員函數(shù); ;,-4-,其中,“成員”既可以是數(shù)據(jù),也可以是函數(shù)。 成員數(shù)據(jù)的聲明方式與一般變量相同。 成員函數(shù)是描述類的對(duì)象可以進(jìn)行的操作,一般在類中聲明原型,在類聲明的外面定義函數(shù)的具體實(shí)現(xiàn)。,8.2 類的定義,-5-,類的成員函數(shù)描述的是類的行為或操作。函數(shù)的原型聲明要在類的主體中,原型說(shuō)明了函數(shù)的參數(shù)表和返回值類型。而函數(shù)的具體實(shí)現(xiàn)一般是寫(xiě)在類聲明之外的。 在類的外部定義成員函數(shù)的語(yǔ)法形式為: 返回值類型 類名:成員函數(shù)名(參數(shù)表) 函數(shù)體 ,8.2 類的定義,-6-,定義一個(gè)類后,只是有了描述該類事物的數(shù)據(jù)類型。當(dāng)我們使用“類”這個(gè)數(shù)據(jù)類型定義一個(gè)變量時(shí),就生成了一個(gè)該“類”的對(duì)象。對(duì)象有時(shí)又稱為實(shí)例。 例如,Student stu(1,“wang”,M); 定義了一個(gè)對(duì)象名字為stu的Student類型的對(duì)象。,8.3 對(duì)象的定義,-7-,定義一個(gè)對(duì)象和定義一個(gè)一般變量相同。 定義變量時(shí)要分配存儲(chǔ)空間,同樣,定義一個(gè)對(duì)象時(shí)要分配存儲(chǔ)空間,一個(gè)對(duì)象所占的內(nèi)存空間是類的數(shù)據(jù)成員所占的空間總和。類的成員函數(shù)存放在代碼區(qū)。 類的成員是抽象的,對(duì)象的成員才是具體的。類的數(shù)據(jù)成員都不會(huì)有具體的屬性值。只有對(duì)象的成員才會(huì)有具體的屬性值。,8.3 對(duì)象的定義,-8-,8.3 對(duì)象的定義,類中成員互訪 直接使用成員名 類外訪問(wèn) 使用“對(duì)象名.成員名”方式訪問(wèn) public 屬性的成員,-9-,類的成員函數(shù)可以有多種特殊形式,包括帶默認(rèn)參數(shù)值的成員函數(shù)、內(nèi)聯(lián)成員函數(shù)和重載成員函數(shù)。,8.4 類的成員函數(shù),-10-,class Student public: Student(int pId, char* pName, char pSex); / 構(gòu)造函數(shù) void printStudent(); / printStudent函數(shù)聲明 void setNationality(char* pNationality); / 設(shè)置國(guó)籍函數(shù) private: int id; / 定義學(xué)號(hào)變量 char* name; / 定義姓名字符指針變量 char sex; / 定義性別變量 char* nationality; / 定義國(guó)籍字符指針變量 ;,8.4.1 帶默認(rèn)參數(shù)值的成員函數(shù),-11-,void Student:setNationality(char* pNationality=“China“) nationality = new charstrlen(pNationality)+1; if(nationality != 0) strcpy(nationality,pNationality); 調(diào)用: Student stu(1,“wang“,M); stu.setNationality();,8.4.1 帶默認(rèn)參數(shù)值的成員函數(shù),-12-,如果在類的內(nèi)部定義成員函數(shù)的具體實(shí)現(xiàn),則該成員函數(shù)為內(nèi)聯(lián)成員函數(shù)。 函數(shù)定義時(shí)沒(méi)有任何的附加說(shuō)明,所以稱為隱式聲明的內(nèi)聯(lián)成員。,8.4.2 內(nèi)聯(lián)成員函數(shù),-13-,8.4.2 內(nèi)聯(lián)成員函數(shù),在類中說(shuō)明原形,可以在類外給出函數(shù)體實(shí)現(xiàn),并在函數(shù)名前使用類名加以限定。也可以直接在類中給出函數(shù)體,形成內(nèi)聯(lián)成員函數(shù)。 在類中聲明內(nèi)聯(lián)成員函數(shù)的方式: 將函數(shù)體放在類的聲明中(隱式)。 使用inline關(guān)鍵字(顯示)。,-14-,class Student public: void printStudent(); / 打印所有信息 / 根據(jù)flag取值打印不同信息 / flag=1, 打印id / flag=2, 打印name / flag=3, 打印sex / flag=4, 打印nationality void printStudent(int flag); private: ;,8.4.3 重載成員函數(shù),-15-,關(guān)鍵字public、protected、private說(shuō)明類成員的訪問(wèn)控制屬性。私有(private)成員只允許本類的成員函數(shù)來(lái)訪問(wèn);公有(public)成員是類對(duì)外的接口,在類聲明和類(函數(shù))實(shí)現(xiàn)之后,外部對(duì)象可以訪問(wèn)公有成員。保護(hù)型(protected)成員的可訪問(wèn)性和私有成員的性質(zhì)相似,與繼承有關(guān)。,8.5 類成員的訪問(wèn)屬性,-16-,關(guān)于訪問(wèn)控制屬性,注意: 在類聲明中,三種訪問(wèn)控制屬性,可以按任意次序出現(xiàn),也可以不出現(xiàn)。public等關(guān)鍵字也可以多次出現(xiàn),但是一個(gè)成員只能具有一種訪問(wèn)控制屬性。 如果不寫(xiě)訪問(wèn)控制屬性關(guān)鍵字,默認(rèn)的是private。在書(shū)寫(xiě)時(shí)通常習(xí)慣將public放在最前面,這樣便于閱讀,因?yàn)樗鼈兪峭獠吭L問(wèn)時(shí)所要了解的。 一般情況下,一個(gè)類的數(shù)據(jù)成員應(yīng)該聲明為私有成員,這樣封裝性較好。一個(gè)類應(yīng)該有一些公有的函數(shù)成員,作為對(duì)外的接口,否則別的代碼無(wú)法訪問(wèn)類,8.5 類成員的訪問(wèn)屬性,-17-,8.5 類成員的訪問(wèn)屬性,-18-,8.6 對(duì)象的使用,對(duì)象是類的一個(gè)具體的實(shí)例,類和對(duì)象的關(guān)系相當(dāng)于普遍與特殊的關(guān)系。在C+中,類是一個(gè)自定義的數(shù)據(jù)類型,對(duì)象是該數(shù)據(jù)類型的一個(gè)變量。 所以,可以定義一個(gè)全局的對(duì)象,也可以在函數(shù)體中定義一個(gè)局部的對(duì)象,或者動(dòng)態(tài)地從堆中申請(qǐng)空間來(lái)創(chuàng)建一個(gè)對(duì)象,還可以定義對(duì)象數(shù)組,以及使用對(duì)象作為函數(shù)的參數(shù)與返回值。,-19-,8.6.1 對(duì)象指針,聲明對(duì)象指針的一般語(yǔ)法形式為: 類名* 對(duì)象指針名; 使用對(duì)象指針訪問(wèn)對(duì)象的成員,語(yǔ)法形式為: 對(duì)象指針名-公有成員; 例如: Clock c; Clock* pc1=new Clock; Clock* pc2=,-20-,8.6.2 this指針,問(wèn):一個(gè)類中所有對(duì)象調(diào)用的成員函數(shù)都執(zhí)行同一段代碼。那么,成員函數(shù)又是怎么識(shí)別當(dāng)前是那個(gè)對(duì)象在訪問(wèn)呢? 答:this指針指出了成員函數(shù)當(dāng)前所操作的數(shù)據(jù)所屬的對(duì)象。不同的對(duì)象調(diào)用成員函數(shù)時(shí),this指針將指向不同的對(duì)象,也就可以訪問(wèn)不同對(duì)象的數(shù)據(jù)成員。,-21-,8.6.3 對(duì)象數(shù)組,對(duì)象數(shù)組的元素是對(duì)象,不僅具有數(shù)據(jù)成員,而且還有函數(shù)成員,可以通過(guò)數(shù)組元素調(diào)用成員函數(shù)。 例:student stu10;,-22-,8.6.4 對(duì)象用做函數(shù)的參數(shù)和返回值,可以將對(duì)象作為參數(shù)傳遞給一個(gè)函數(shù)或從函數(shù)返回一個(gè)對(duì)象。 直接用對(duì)象作為參數(shù),調(diào)用函數(shù)時(shí),進(jìn)行值傳遞,實(shí)參的值要復(fù)制給形參,如果類的數(shù)據(jù)成員較多時(shí),需要一一復(fù)制. 但是,這種參數(shù)傳遞方式效率不高,可以使用對(duì)象指針或?qū)ο笠梅绞絹?lái)傳遞函數(shù)參數(shù)。,-23-,8.7 構(gòu)造函數(shù),構(gòu)造函數(shù)的作用是在對(duì)象被創(chuàng)建時(shí)使用特定的值構(gòu)造對(duì)象,或者說(shuō)將對(duì)象初始化為一個(gè)特定的狀態(tài)。 在對(duì)象創(chuàng)建時(shí)由系統(tǒng)自動(dòng)調(diào)用。 如果程序中未聲明,則系統(tǒng)自動(dòng)產(chǎn)生出一個(gè)缺省形式的構(gòu)造函數(shù) 允許為內(nèi)聯(lián)函數(shù)、重載函數(shù)、帶缺省形參值的函數(shù),-24-,8.7 構(gòu)造函數(shù),class Clock public: Clock (int NewH, int NewM, int NewS);/構(gòu)造函數(shù) Clock () /缺省構(gòu)造函數(shù) void SetTime(int NewH, int NewM, int NewS); void ShowTime( ); private: int Hour,Minute,Second; ;,-25-,構(gòu)造函數(shù)的實(shí)現(xiàn): Clock:Clock(int H, int M, int S) Hour=H; Minute=M; Second=S; 建立對(duì)象時(shí)構(gòu)造函數(shù)的作用: void main( ) Clock c(0,0,0); /隱含調(diào)用構(gòu)造函數(shù),將初始值作為實(shí)參。 c.ShowTime( ); ,-26-,8.7 構(gòu)造函數(shù),每個(gè)對(duì)象區(qū)別于其他對(duì)象的地方主要有兩個(gè),外在的區(qū)別就是對(duì)象的標(biāo)識(shí)符,即對(duì)象的名稱,而內(nèi)在的區(qū)別就是對(duì)象自身的屬性值,即數(shù)據(jù)成員的值。 在定義一個(gè)對(duì)象的時(shí)候要給它分配存儲(chǔ)空間,也可以同時(shí)給它的數(shù)據(jù)成員賦初值,稱為對(duì)象的初始化。 C+程序中的對(duì)象初始化工作由一個(gè)特殊的成員函數(shù)來(lái)完成,就是構(gòu)造函數(shù)。 因?yàn)椴煌愋偷膶?duì)象的初始化工作是不一樣的,因此構(gòu)造函數(shù)從屬于某個(gè)類的,即每個(gè)類都要定義它自己的構(gòu)造函數(shù),它是類的成員函數(shù)。,-27-,定義構(gòu)造函數(shù)的一般形式為: class 類名 public: 類名(形參表); /構(gòu)造函數(shù)的原型 /類的其它成員 ; 類名:類名(形參表) /構(gòu)造函數(shù)的實(shí)現(xiàn) /函數(shù)體 ,8.7 構(gòu)造函數(shù),-28-,構(gòu)造函數(shù)的特點(diǎn)是: 構(gòu)造函數(shù)的函數(shù)名與類名相同;而且沒(méi)有返回值。 構(gòu)造函數(shù)一定是公有函數(shù)。 作為類的成員函數(shù),構(gòu)造函數(shù)可以直接訪問(wèn)類的所有數(shù)據(jù)成員。 在類的內(nèi)部定義的構(gòu)造函數(shù)是內(nèi)聯(lián)函數(shù)。構(gòu)造函數(shù)可以帶默認(rèn)形參值,也可以重載。,8.7 構(gòu)造函數(shù),-29-,在聲明類時(shí)如果沒(méi)有定義類的構(gòu)造函數(shù),編譯系統(tǒng)就會(huì)在編譯時(shí)自動(dòng)生成一個(gè)默認(rèn)形式的構(gòu)造函數(shù); 默認(rèn)構(gòu)造函數(shù)是不提供參數(shù)的構(gòu)造函數(shù)。,8.7 構(gòu)造函數(shù),-30-,8.8 析構(gòu)函數(shù),完成對(duì)象被刪除前的一些清理工作。 在對(duì)象的生存期結(jié)束的時(shí)刻系統(tǒng)自動(dòng)調(diào)用它,然后再釋放此對(duì)象所屬的空間。 如果程序中未聲明析構(gòu)函數(shù),編譯器將自動(dòng)產(chǎn)生一個(gè)缺省的析構(gòu)函數(shù)。,-31-,構(gòu)造函數(shù)和析構(gòu)函數(shù)舉例,#include class Point public: Point(int xx,int yy); Point( ); /.其它函數(shù)原形 private: int X,int Y; ;,-32-,Point:Point(int xx,int yy) X=xx; Y=yy; Point:Point( ) /.其它函數(shù)的實(shí)現(xiàn)略,-33-,與構(gòu)造函數(shù)相反,當(dāng)對(duì)象生存期結(jié)束時(shí),需要調(diào)用析構(gòu)函數(shù),釋放對(duì)象所占的內(nèi)存空間。 與構(gòu)造函數(shù)一樣,析構(gòu)函數(shù)也是類的一個(gè)公有成員函數(shù),它的名稱是在類名前加“”構(gòu)成,沒(méi)有返回值,和構(gòu)造函數(shù)不同的是析構(gòu)函數(shù)不接受任何參數(shù),析構(gòu)函數(shù)是不可重載的。 析構(gòu)函數(shù)是在對(duì)象生存期即將結(jié)束的時(shí)刻由系統(tǒng)自動(dòng)調(diào)用的。如果程序員沒(méi)有定義析構(gòu)函數(shù),系統(tǒng)將自動(dòng)生成和調(diào)用一個(gè)默認(rèn)析構(gòu)函數(shù)。,8.8 析構(gòu)函數(shù),-34-,拷貝構(gòu)造函數(shù)就是函數(shù)的形參是類的對(duì)象的引用的構(gòu)造函數(shù)。 通過(guò)等于號(hào)復(fù)制對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。 如果程序在類定義時(shí)沒(méi)有顯式定義拷貝構(gòu)造函數(shù),系統(tǒng)也會(huì)自動(dòng)生成一個(gè)默認(rèn)的拷貝構(gòu)造函數(shù),把成員值一一復(fù)制。 拷貝構(gòu)造函數(shù)與原來(lái)的構(gòu)造函數(shù)實(shí)現(xiàn)了函數(shù)的重載。,8.9 拷貝構(gòu)造函數(shù),-35-,以下三種情況系統(tǒng)會(huì)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù): 當(dāng)用類的一個(gè)對(duì)象去初始化該類的另一個(gè)對(duì)象時(shí) 如果函數(shù)的形參是類的對(duì)象,為值傳遞,調(diào)用函數(shù)時(shí),進(jìn)行形參和實(shí)參結(jié)合時(shí) 如果函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行完成返回調(diào)用者時(shí),8.9 拷貝構(gòu)造函數(shù),-36-,拷貝構(gòu)造函數(shù),拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),其形參為本類的對(duì)象引用。 class 類名 public : 類名(形參);/構(gòu)造函數(shù) 類名(類名 &對(duì)象名);/拷貝構(gòu)造函數(shù) . ; 類名: 類名(類名 &對(duì)象名)/拷貝構(gòu)造函數(shù)的實(shí)現(xiàn) 函數(shù)體 ,-37-,例 拷貝構(gòu)造函數(shù)舉例,當(dāng)用類的一個(gè)對(duì)象去初始化該類的另一個(gè)對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用它實(shí)現(xiàn)拷貝賦值。 void main(void) Point A(1,2); Point B(A); /拷貝構(gòu)造函數(shù)被調(diào)用 coutB.GetX( )endl; ,-38-,拷貝構(gòu)造函數(shù)舉例,若函數(shù)的形參為類對(duì)象,調(diào)用函數(shù)時(shí),實(shí)參賦值給形參,系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。例如: void fun1(Point p) coutp.GetX( )endl; void main( ) Point A(1,2); fun1(A); /調(diào)用拷貝構(gòu)造函數(shù) ,-39-,拷貝構(gòu)造函數(shù)舉例,當(dāng)函數(shù)的返回值是類對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用拷貝構(gòu)造函數(shù)。例如: Point fun2( ) Point A(1,2); return A; /調(diào)用拷貝構(gòu)造函數(shù) void main( ) Point B; B=fun2( ); ,-40-,完成簡(jiǎn)單的一一對(duì)應(yīng)的復(fù)制的拷貝構(gòu)造函數(shù)稱為淺拷貝。 如果類的數(shù)據(jù)成員包括指針變量,類的構(gòu)造函數(shù)用new運(yùn)算符為這個(gè)指針動(dòng)態(tài)申請(qǐng)空間。如果通過(guò)淺拷貝進(jìn)行了對(duì)象的復(fù)制。最后,在退出運(yùn)行時(shí),程序會(huì)報(bào)錯(cuò)。這時(shí)需要用“深拷貝”的方式恰當(dāng)定義類的拷貝構(gòu)造函數(shù)。 一般來(lái)講,如果一個(gè)類需要析構(gòu)函數(shù)來(lái)釋放資源,則它也需要定義一個(gè)顯式拷貝構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)深拷貝。,8.10 淺拷貝與深拷貝,-41-,靜態(tài)成員,靜態(tài)數(shù)據(jù)成員 用關(guān)鍵字static聲明 該類的所有對(duì)象維護(hù)該成員的同一個(gè)拷貝 必須在類外定義和初始化,用(:)來(lái)指明所屬的類。 靜態(tài)成員函數(shù) 類外代碼可以使用類名和作用域操作符來(lái)調(diào)用靜態(tài)成員函數(shù)。 靜態(tài)成員函數(shù)只能引用屬于該類的靜態(tài)數(shù)據(jù)成員或靜態(tài)成員函數(shù)。,-42-,8.11.1 靜態(tài)成員數(shù)據(jù),靜態(tài)成員數(shù)據(jù)是類的數(shù)據(jù)成員的一種特例,采用static關(guān)鍵字來(lái)聲明。 類的數(shù)據(jù)成員在類的每一個(gè)對(duì)象中分別存儲(chǔ)不同的數(shù)值,但是靜態(tài)成員數(shù)據(jù)則不同,它在整個(gè)類中只有一個(gè)拷貝,由該類的所有對(duì)象共同維護(hù)和使用,從而實(shí)現(xiàn)了同一類的不同對(duì)象之間的數(shù)據(jù)共享。 靜態(tài)數(shù)據(jù)成員具有靜態(tài)生存期。 在類的聲明中只能聲明靜態(tài)成員數(shù)據(jù)的存在。由于類的聲明是抽象的,靜態(tài)成員數(shù)據(jù)的初始化需要在類的外部進(jìn)行,通過(guò)類名對(duì)它進(jìn)行訪問(wèn)。,-43-,8.11.2 靜態(tài)成員函數(shù),可以通過(guò)定義和使用靜態(tài)成員函數(shù)來(lái)訪問(wèn)靜態(tài)數(shù)據(jù)成員。 所謂靜態(tài)成員函數(shù)就是使用static關(guān)鍵字聲明函數(shù)成員。同靜態(tài)數(shù)據(jù)成員一樣,靜態(tài)成員函數(shù)也屬整個(gè)類,由同一個(gè)類的所有對(duì)象共同維護(hù),為這些對(duì)象所共享。,-44-,8.11.2 靜態(tài)成員函數(shù),靜態(tài)成員函數(shù)作為成員函數(shù),它的訪問(wèn)屬性可以受到類的嚴(yán)格控制。對(duì)公有靜態(tài)成員函數(shù),可以通過(guò)類名或?qū)ο竺麃?lái)調(diào)用;而一般的非靜態(tài)公有成員函數(shù)只能通過(guò)對(duì)象名來(lái)調(diào)用。 靜態(tài)成員函數(shù)可以直接訪問(wèn)該類的靜態(tài)數(shù)據(jù)成員和函數(shù)成員;而訪問(wèn)非靜態(tài)數(shù)據(jù)成員,必須通過(guò)參數(shù)傳遞方式得到對(duì)象名,然后通過(guò)對(duì)象名來(lái)訪問(wèn)。,-45-,8.12 友元,在程序設(shè)計(jì)中,將數(shù)據(jù)與操作數(shù)據(jù)的行為進(jìn)行有機(jī)地結(jié)合,這就是封裝。 C+語(yǔ)言提供類實(shí)現(xiàn)封裝,類是屬性和操作的結(jié)合體,并且在定義類的屬性和操作時(shí),規(guī)定了它們的可見(jiàn)性。 通過(guò)封裝將一部分成員作為類與外部的接口,而將其它的成員隱藏起來(lái),以防外界的干擾和誤操作,使程序的不同模塊之間的相互影響減小到最低限度。,-46-,8.12.1 友元函數(shù),友元函數(shù)是在類聲明中由關(guān)鍵字friend修飾說(shuō)明的非成員函數(shù),在它的函數(shù)體中能夠通過(guò)對(duì)象名訪問(wèn) private 和 protected成員 作用:增加靈活性,使程序員可以在封裝和快速性方面做合理選擇。 訪問(wèn)對(duì)象中的成員必須通過(guò)對(duì)象名。,-47-,例. 使用友元函數(shù)計(jì)算兩點(diǎn)距離,#include #include class Point /Point類聲明 public: /外部接口 Point(int xx=0, int yy=0) X=xx;Y=yy; int GetX( ) return X; int GetY( ) return Y; friend double Distance(Point ,-48-,double Distance( Point ,-49-,8.12.1 友元類,若一個(gè)類為另一個(gè)類的友元,則此類的所有成員都能訪問(wèn)對(duì)方類的私有成員。 聲明語(yǔ)法:將友元類名在另一個(gè)類中使用friend修飾說(shuō)明。,-50-,友元類舉例,class A friend class B; public: void Display( ) coutxendl; private: int x; class B public: void Set(int i); void Display( ); private: A a; ;,-51-,void B:Set(int i) a.x=i; void B:Display( ) a.Display( ); ,-52-,關(guān)于友元類,要注意: 友元關(guān)系是不能傳遞的。B類是A類的友元,C類是B類的友元,C類和A類之間,如果沒(méi)有聲明,就沒(méi)有任何友元關(guān)系,不能進(jìn)行數(shù)據(jù)共享。 友元關(guān)系是單向的。如果聲明B類是A類的友元,B類的成員函數(shù)就可以訪問(wèn)A類的私有和保護(hù)數(shù)據(jù),但A類的成員函數(shù)卻不能訪問(wèn)B類的私有和保護(hù)數(shù)據(jù)。,8.13 常對(duì)象,-54-,8.13 常對(duì)象,定義對(duì)象時(shí)用const進(jìn)行修飾,稱為常對(duì)象,它的數(shù)據(jù)成員值在對(duì)象的整個(gè)生存期間內(nèi)不能被改變。也就是說(shuō),常對(duì)象在定義時(shí)必須進(jìn)行初始化,而且不能被更新。 使用常量,既實(shí)現(xiàn)了數(shù)據(jù)共享、又可以保證數(shù)據(jù)不會(huì)被改變。,class A public: A(int i,int j) x=i; y=j; . private: int x,y; ; A const a(3,4); /a是常對(duì)象,不能被更新,8.14 常成員,-56-,8.14 常成員,對(duì)于類的某個(gè)成員函數(shù),使用const關(guān)鍵字修飾,稱為常成員函數(shù)。常對(duì)象只能調(diào)用常成員函數(shù),保證常對(duì)象的數(shù)據(jù)成員不能被修改。 使用const說(shuō)明的數(shù)據(jù)成員稱為常數(shù)據(jù)成員。如果在一個(gè)類中說(shuō)明了常數(shù)據(jù)成員,那么任何函數(shù)中都不能對(duì)該成員賦值。,常成員函數(shù)說(shuō)明格式: 類型說(shuō)明符 函數(shù)名(參數(shù)表)const; 1)const是函數(shù)類型的一個(gè)組成部分,因此在實(shí)現(xiàn) 部分也要帶const關(guān)鍵字。 2)const關(guān)鍵字可以被用于參與對(duì)重載函數(shù)的區(qū)分 3)常對(duì)象只能調(diào)用常成員函數(shù);但是普通對(duì)象也可以 調(diào)用常成員函數(shù),使用const說(shuō)明的數(shù)據(jù)成員。格式如下: const 類型說(shuō)明符 數(shù)據(jù)成員名;,-57-,例 常成員函數(shù)舉例,#include class R public: R(int r1, int r2)R1=r1;R2=r2; void print( ); void print( ) const; private: int R1,R2; ;,-58-,例 常數(shù)據(jù)成員舉例,#include class A public: A(int i); void print( ); const int,-59-,8.14 常成員,常成員函數(shù)的特點(diǎn): const是函數(shù)類型的一個(gè)組成部分,在函數(shù)實(shí)現(xiàn)時(shí)也要帶const關(guān)鍵字。 常成員函數(shù)不能更新對(duì)象的數(shù)據(jù)成員,也不能調(diào)用該類中的非常成員函數(shù)。 常對(duì)象只能調(diào)用常成員函數(shù),但是常成員函數(shù)也可以被普通對(duì)象來(lái)調(diào)用。 const關(guān)鍵字可以被用于參與對(duì)重載函數(shù)的區(qū)分。,8.15 組合關(guān)系,-61-,8.15 組合關(guān)系,現(xiàn)實(shí)世界中對(duì)象與對(duì)象之間的整體-部分關(guān)系又稱為組合關(guān)系。生活中有很多這方面的實(shí)例。例如,一輛汽車由四個(gè)車輪、一個(gè)方向盤和一個(gè)發(fā)動(dòng)機(jī)等部件組成,一個(gè)桌子有一個(gè)桌面和四個(gè)桌腿組成。那么,汽車對(duì)象和車輪對(duì)象、方向盤對(duì)象以及發(fā)動(dòng)機(jī)對(duì)象之間就構(gòu)成了組合關(guān)系,桌子對(duì)象和桌面對(duì)象以及桌腿對(duì)象之間也構(gòu)成了組合關(guān)系。,-62-,8.15 組合關(guān)系,-63-,8.15 組合關(guān)系,#include using namespace std; class Tyre / 輪胎類Tyre的定義 public: Tyre() cout“Constructing one Tyre.“endl; private: float maxSpeed; / 最大速度 int loadIndex; / 載重指數(shù) float diameter; / 直徑 char spec20; / 規(guī)格 char company20; / 生產(chǎn)廠家 ;,-64-,8.15 組合關(guān)系,class SteeringWheel / 方向盤類SteeringWheel的定義 public: SteeringWheel() cout“Constructing one SteeringWheel.“endl; private: int color; / 顏色 char material20; / 材質(zhì) char type10; / 類型 char company20; / 生產(chǎn)廠家 ;,-65-,8.15 組合關(guān)系,class Motor / 發(fā)動(dòng)機(jī)類Motor的定義 public: Motor() cout“Constructing one Motor.“endl; private: float gasDischarge; / 排氣量 float oilConsume; / 耗油量 float power; / 功率 float zip; / 壓縮比 char company20; / 生產(chǎn)廠家 ;,-
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山區(qū)捐贈(zèng)助學(xué)活動(dòng)方案
- 市級(jí)棋藝比賽活動(dòng)方案
- 少年軍校團(tuán)建活動(dòng)方案
- 小組幼兒美工活動(dòng)方案
- 工匠工作室評(píng)選活動(dòng)方案
- 小學(xué)采蜜集活動(dòng)方案
- 工廠舉行活動(dòng)方案
- 小班繪畫(huà)課程活動(dòng)方案
- 小班兔子跳活動(dòng)方案
- 小說(shuō)抽獎(jiǎng)活動(dòng)方案
- JT∕T 1128-2017 彩色瀝青結(jié)合料
- (正式版)JTT 1488-2024 網(wǎng)絡(luò)平臺(tái)道路貨物運(yùn)輸服務(wù)規(guī)范
- 一種基于STM32的溫濕度檢測(cè)系統(tǒng)
- 農(nóng)貿(mào)市場(chǎng)上半年工作總結(jié)報(bào)告
- 幼兒園課件:《我會(huì)疊衣服》
- 建筑材料(東北農(nóng)業(yè)大學(xué))智慧樹(shù)知到期末考試答案2024年
- 電力施工現(xiàn)場(chǎng)安全交底
- 創(chuàng)新創(chuàng)業(yè)教程(第四版)大學(xué)生創(chuàng)新創(chuàng)業(yè)全套教學(xué)課件
- 網(wǎng)絡(luò)攻擊和防御技術(shù)培訓(xùn)
- 關(guān)節(jié)鏡技術(shù)在髖關(guān)節(jié)炎中的應(yīng)用與治療效果
- 中央廚房食品項(xiàng)目經(jīng)營(yíng)分析報(bào)告
評(píng)論
0/150
提交評(píng)論