C程序設(shè)計第9章 類和對象_第1頁
C程序設(shè)計第9章 類和對象_第2頁
C程序設(shè)計第9章 類和對象_第3頁
C程序設(shè)計第9章 類和對象_第4頁
C程序設(shè)計第9章 類和對象_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 第9章 類和對象 目的與要求9.1 概述9.2 類與對象9.3 構(gòu)造函數(shù)9.4 析構(gòu)函數(shù)9.5 構(gòu)造函數(shù)和對象成員9.6 this指針本章小結(jié)目的與要求 通過本章學(xué)習(xí),應(yīng)理解類與對象的概念,掌握類與對象的定義方法,能用類描述某事物,用類定義的對象對該事物進(jìn)行處理。了解構(gòu)造函數(shù)與析構(gòu)函數(shù)的概念及作用,掌握構(gòu)造函數(shù)與析構(gòu)函數(shù)的定義格式及使用方法。初步掌握new運(yùn)算符動態(tài)建立對象及用delete運(yùn)算符回收對象占用空間的方法。初步掌握類中對象成員的構(gòu)造函數(shù)格式及調(diào)用過程。理解this指針的概念。9.1 概述引例: 【例9.1】先定義一個學(xué)生成績的結(jié)構(gòu)體類型student,再定義計算學(xué)生平均成績的函數(shù)

2、average()與顯示學(xué)生成績的函數(shù)display(),在主函數(shù)中輸入學(xué)生成績,并調(diào)用average()計算平均成績,調(diào)用display()顯示學(xué)生成績。 例程概述 1用結(jié)構(gòu)體描述與處理事物存在的問題 (1)程序的獨(dú)立性與可維護(hù)性差 (2)數(shù)據(jù)的安全性差 2解決問題的方法 采用面向?qū)ο蟮某绦蛟O(shè)計方法(簡稱oop) 面向?qū)ο蟮某绦蛟O(shè)計方法是將描述某類事物的數(shù)據(jù)與處理這些數(shù)據(jù)的函數(shù)封裝成一個整體,稱為類 。9.2 類與對象 9.2.1 類 1.類的定義 (1)類是由描述某類事物的數(shù)據(jù)和處理數(shù)據(jù)的函數(shù)組成的導(dǎo)出數(shù)據(jù)類型。(2)類的成員有兩種:數(shù)據(jù)成員、成員函數(shù)。2.定義格式類的定義格式為: cla

3、ss private: /定義私有數(shù)據(jù)成員或成員函數(shù) public: /定義公有數(shù)據(jù)成員或成員函數(shù) protected: /定義保護(hù)數(shù)據(jù)成員或成員函數(shù) ;3.成員訪問權(quán)限 private:定義私有成員。 私有數(shù)據(jù)成員只允許類內(nèi)函數(shù)訪問,私有成員函數(shù)只允許在類內(nèi)調(diào)用。類外函數(shù)不允許訪問私有數(shù)據(jù)成員,也不允許調(diào)用私有成員函數(shù)。 成員訪問權(quán)限public:定義公有成員。 公有數(shù)據(jù)成員允許類內(nèi)或類外的函數(shù)訪問,公有成員函數(shù)允許在類內(nèi)或類外調(diào)用。 成員訪問權(quán)限protected:定義保護(hù)成員。 保護(hù)數(shù)據(jù)成員只允許類內(nèi)或其子類中函數(shù)訪問,保護(hù)成員函數(shù)允許在類內(nèi)或其子類中調(diào)用。 類的定義舉例【例9.2】定義

4、學(xué)生成績類student,其數(shù)據(jù)成員與成員函數(shù)如下。(1)描述學(xué)生成績的私有數(shù)據(jù)成員為:姓名 ( name8 )、物理(phi)、數(shù)學(xué)(math)、平均成績(ave);(2)處理學(xué)生成績的公有成員函數(shù)為: 輸入學(xué)生成績成員函數(shù):input(); 計算平均成績成員函數(shù):average(); 顯示學(xué)生成績成員函數(shù):display(); 輸出學(xué)生成績成員函數(shù):output()。 例程例程4.類的特點(diǎn)(1)類具有封裝性 (2)類具有安全性 (3)類具有獨(dú)立性與可維護(hù)性。 (4)類具有繼承性 (5)類具有重載性與多態(tài)性 5.類的說明 (1)類的成員默認(rèn)的訪問權(quán)限為私有。 (2)成員函數(shù)可在類體內(nèi)作引用性

5、說明,類體外作定義性說明。 在類體外定義成員函數(shù)的格式為: :(形參表) 函數(shù)體(3)關(guān)鍵詞public、private、protected在類中使用先后次序無關(guān)緊要,且可使用多次。 類的說明(4)數(shù)據(jù)成員與成員函數(shù)在類中的定義次序無關(guān)緊要 。(5)因?yàn)轭愂且环N數(shù)據(jù)類型,系統(tǒng)并不會為其分配內(nèi)存空間 ,所以在定義類中的數(shù)據(jù)成員時,不能對其進(jìn)行初始化,也不能指定其存儲類型。(6)類和結(jié)構(gòu)體的關(guān)系 結(jié)構(gòu)體與類唯一區(qū)別在于:在類中,其成員的缺省存取權(quán)限是私有,而在結(jié)構(gòu)體類型中,其成員的缺省權(quán)限是公有。 9.2.2 對象 用類定義的變量稱為對象。 1.對象的定義格式存儲類型 ,; 例如: student

6、 stu1,stu2; 2.存儲空間的分配 定義類時系統(tǒng)并不為類分配內(nèi)存空間,僅當(dāng)用類定義對象時系統(tǒng)才為對象分配內(nèi)存空間。 為對象分配的存儲空間大小取決于在定義類時所定義的成員類型和數(shù)量。 在創(chuàng)建對象時,類被用作樣板,因此對象也稱為實(shí)例。 在建立不同對象時,系統(tǒng)只為數(shù)據(jù)成員分配不同內(nèi)存空間,而不同對象的成員函數(shù)則共享同一內(nèi)存空間。 3.定義對象的三種方式 (1)先定義類,后定義對象,例如: student stu1,stu2;(2)定義類的同時定義對象,例如: class student stu1,stu2; (3)直接定義對象,例如: class stu1,stu2; 4.對象成員的引用 每

7、個由類定義的對象都有若干個數(shù)據(jù)成員與成員函數(shù),在類外通過對象可以使用公有的數(shù)據(jù)成員及成員函數(shù)。 (1)引用數(shù)據(jù)成員的格式為: (2)調(diào)用成員函數(shù)的格式為: (實(shí)參)注意:在類內(nèi)引用本類的數(shù)據(jù)成員或調(diào)用本類的成員函數(shù)時,不能加對象名。 5.對象的賦值運(yùn)算 同類對象之間所能進(jìn)行的惟一運(yùn)算就是賦值運(yùn)算,賦值運(yùn)算的格式為: =; 【例9.4】定義描述學(xué)生成績的類student,然后用student定義一個學(xué)生對象stu。在主函數(shù)中輸入學(xué)生的姓名、物理、數(shù)學(xué),并調(diào)用成員函數(shù)input()輸入到數(shù)據(jù)成員name、phi、math中,調(diào)用成員函數(shù)average()計算平均成績,調(diào)用成員函數(shù)output()將

8、對象stu的私有數(shù)據(jù)成員返回給主函數(shù),并顯示其值。最后再調(diào)用成員函數(shù)display()顯示私有數(shù)據(jù)成員的值。 例程例程 對象的使用說明 (1)定義對象時,編譯系統(tǒng)為不同對象的數(shù)據(jù)成員分配不同的內(nèi)存空間;(2)不能在類外直接對其私有數(shù)據(jù)成員進(jìn)行操作,如:stu.phi=90;是錯誤的。而只能通過公有成員函數(shù)input()對其進(jìn)行賦值操作,這樣就保證了數(shù)據(jù)的安全性。(3)對象允許進(jìn)行賦值運(yùn)算。同類對象的賦值運(yùn)算將stu1的所有數(shù)據(jù)成員值賦給stu2對應(yīng)的數(shù)據(jù)成員。(4)對象作為函數(shù)參數(shù)時,屬于值傳送。只能通過函數(shù)返回對象值,而不能通過形參返回運(yùn)算結(jié)果。 (5)在定義對象時可對公有數(shù)據(jù)成員進(jìn)行初始化

9、賦值,但不能對私有或保護(hù)數(shù)據(jù)成員進(jìn)行初始化賦值。私有或保護(hù)數(shù)據(jù)成員只能通過構(gòu)造函數(shù)進(jìn)行初始化賦值。9.3 構(gòu)造函數(shù) 構(gòu)造函數(shù)主要作用是在定義對象時,對其數(shù)據(jù)成員進(jìn)行初始化。 9.3.1 構(gòu)造函數(shù)的定義1.構(gòu)造函數(shù)的定義格式 : () 構(gòu)造函數(shù)體注意:構(gòu)造函數(shù)的函數(shù)名必須與類名相同,且無返回數(shù)據(jù)類型。若在類內(nèi)定義構(gòu)造函數(shù),則“:”可省去。 【例9.5】在【例9.4 】的學(xué)生成績類student中定義構(gòu)造函數(shù),用構(gòu)造函數(shù)實(shí)現(xiàn)對象stu1的初始化賦值。 例程例程2.對構(gòu)造函數(shù)的說明 (1)構(gòu)造函數(shù)名必須與類同名。 (2)定義構(gòu)造函數(shù)時,不能定義函數(shù)返回值的類型,也不能指定為void 類型。因構(gòu)造函數(shù)

10、無需返回函數(shù)值 。(3)構(gòu)造函數(shù)可重載,其參數(shù)可有可無,也可指定默認(rèn)值。(4)若要用類定義對象,則構(gòu)造函數(shù)必須是公有成員函數(shù)。若類僅用于派生其它類,則構(gòu)造函數(shù)可定義為保護(hù)成員函數(shù)。 9.3.2 用構(gòu)造函數(shù)初始化對象的過程 用構(gòu)造函數(shù)初始化對象的過程,實(shí)際上就是對構(gòu)造函數(shù)的調(diào)用過程。其步驟為: (1)程序執(zhí)行到定義對象語句時,系統(tǒng)為對象分配內(nèi)存空間;(2)系統(tǒng)自動調(diào)用構(gòu)造函數(shù),將實(shí)參傳送給形參,執(zhí)行構(gòu)造函數(shù)體時,將形參值賦給對象的數(shù)據(jù)成員。 【例9.6】定義描述矩形的類。用構(gòu)造函數(shù)完成矩形對象的初始化,編寫計算矩形面積的函數(shù),并輸出矩形面積。 例程例程用構(gòu)造函數(shù)初始化對象時的注意點(diǎn)(1)定義無參

11、對象時,對象后不能跟“()”。(2)類已定義構(gòu)造函數(shù)前提下,有參(無參)對象必須定義帶參(無參)構(gòu)造函數(shù) 9.3.3 默認(rèn)構(gòu)造函數(shù) 默認(rèn)構(gòu)造函數(shù)有三類:(1)編譯器產(chǎn)生的缺省構(gòu)造函數(shù)(前提:用戶未定義構(gòu)造函數(shù))格式: :( ) ;/該構(gòu)造函數(shù)什么也不做。(2)無參構(gòu)造函數(shù)(3)各參數(shù)均有默認(rèn)值的構(gòu)造函數(shù) 默認(rèn)構(gòu)造函數(shù)必須惟一。 9.3.4 拷貝的構(gòu)造函數(shù) 用類定義對象時,可用拷貝功能的構(gòu)造函數(shù)將另一個已存在對象的數(shù)據(jù)拷貝到新建的對象中。 拷貝構(gòu)造函數(shù)的格式為: :(類名 &c) 函數(shù)體 【例9.7】在【例9.6 】中增加一個拷貝構(gòu)造函數(shù),在主函數(shù)中用矩形類rectangle定義對象r3

12、,實(shí)參為r1。 例程例程9.3.5 用new運(yùn)算符動態(tài)定義對象 可以用new運(yùn)算符來動態(tài)地建立對象。用new運(yùn)算符建立對象時,同樣也要自動調(diào)用構(gòu)造函數(shù),以便完成對象數(shù)據(jù)成員的初始化。 【例9.8】定義一個矩形類,類中有一個帶參構(gòu)造函數(shù)與一個無參構(gòu)造函數(shù)。用new運(yùn)算符建立矩形對象時調(diào)用構(gòu)造函數(shù)完成對矩形的初始化。 例程例程用new運(yùn)算符動態(tài)定義對象結(jié)論 當(dāng)用new運(yùn)算符動態(tài)建立對象時,系統(tǒng)將:(1)為對象分配內(nèi)存空間;(2)調(diào)用構(gòu)造函數(shù)初始化對象的數(shù)據(jù)成員;(3)將對象起始地址返回給指針變量;(4)動態(tài)分配的對象內(nèi)存空間必須用delete運(yùn)算符回收。 9.4 析構(gòu)函數(shù) 析構(gòu)函數(shù)作用是在撤消對象

13、時,回收對象占用的內(nèi)存空間。 9.4.1 定義析構(gòu)函數(shù) 析構(gòu)函數(shù)定義格式為: :() 析構(gòu)函數(shù)體 定義析構(gòu)函數(shù)的說明說明:(1)析構(gòu)函數(shù)名必須與類名相同,并在其前加“”。(以便與構(gòu)造函數(shù)名相區(qū)別); (2)析構(gòu)函數(shù)不能帶任何參數(shù),無返回值(函數(shù)名前不能用關(guān)鍵詞void);(3)析構(gòu)函數(shù)不允許重載,是唯一的; (3)析構(gòu)函數(shù)是在撤消對象時由系統(tǒng)自動調(diào)用,其作用是在撤消對象前做好結(jié)束工作 。9.4.2 析構(gòu)函數(shù)的調(diào)用 析構(gòu)函數(shù)的調(diào)用分兩種情況: 1.用類直接建立對象 在程序執(zhí)行過程中,當(dāng)遇到對象的生命期結(jié)束時,系統(tǒng)自動調(diào)用析構(gòu)函數(shù),然后回收為對象所分配的存儲空間。 【例9.9】定義描述矩形的類。用

14、構(gòu)造函數(shù)完成矩形對象的初始化,在析構(gòu)函數(shù)中顯示“調(diào)用析構(gòu)函數(shù)”字樣,編寫計算矩形面積的函數(shù),并輸出矩形的面積。例程例程用類直接建立對象舉例【例9.10】定義描述復(fù)數(shù)的類complex,定義數(shù)據(jù)成員與成員函數(shù)如下。(1)私有數(shù)據(jù)成員為:實(shí)部real,虛部image;(2)公有成員函數(shù)為:帶參構(gòu)造函數(shù):complex(float r=0,float i=0);拷貝構(gòu)造函數(shù):complex(complex &c);顯示復(fù)數(shù)的函數(shù):show();析構(gòu)函數(shù): complex();(3)主函數(shù)內(nèi)用復(fù)數(shù)類complex定義對象c1(10,20);定義對象c2(c1),并調(diào)用show()函數(shù)顯示復(fù)數(shù)值

15、。 例程例程2.用new運(yùn)算符動態(tài)生成對象 用new運(yùn)算符動態(tài)生成的對象,在產(chǎn)生對象時調(diào)用構(gòu)造函數(shù),只在用delete 釋放對象時,才調(diào)用析構(gòu)函數(shù)。 【例9.11】定義一個復(fù)數(shù)類,類中有一個帶參構(gòu)造函數(shù)、一個無參構(gòu)造函數(shù)及一個析構(gòu)函數(shù)。用new運(yùn)算符建立復(fù)數(shù)對象時調(diào)用構(gòu)造函數(shù)完成對復(fù)數(shù)的初始化。最后用delete運(yùn)算符回收對象占用的內(nèi)存空間。例程例程9.4.3 默認(rèn)的析構(gòu)函數(shù) 若在類的定義中沒有顯式地定義析構(gòu)函數(shù),則編譯器自動地產(chǎn)生一個默認(rèn)的析構(gòu)函數(shù),其格式為: :() ;9.5 構(gòu)造函數(shù)和對象成員 在一個類的定義中,若定義有n個對象成員,則其構(gòu)造函數(shù)的一般格式為: :(形參表):(實(shí)參表1)

16、,對象名2(實(shí)參表2),(實(shí)參表n) 構(gòu)造函數(shù)體 其中:(實(shí)參1),對象名2(實(shí)參2), (實(shí)參n) 稱為成員初始化表。 【例9.12】定義一個描述矩形的類與一個描述長方體的類,用矩形類的對象作為長方體類的成員,討論長方體類中的構(gòu)造函數(shù)與對象成員的初始化過程。例程例程對構(gòu)造函數(shù)的幾點(diǎn)說明 (1)形參必須帶有類型說明,而實(shí)參是可計算值的表達(dá)式。 (2)對象成員構(gòu)造函數(shù)的調(diào)用順序取決于這些對象成員在類中的說明順序,而與它們在成員初始化表的位置無關(guān)。 (3)建立類的對象時,先調(diào)用各個對象成員的構(gòu)造函數(shù),初始化相應(yīng)的對象成員,然后才執(zhí)行類的構(gòu)造函數(shù),初始化類中其它成員。析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)正好

17、相反。 【例9.13】說明構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序。 例程例程9.6 this指針 用類定義一個對象時,系統(tǒng)會自動建立一個指向該對象的指針變量,該指針變量稱this指針,this指針變量指向所定義的對象。 this 指針具有如下形式的默認(rèn)說明: * const this=& 對象; 本章小結(jié) 1類的定義 類類:類由描述某類事物的數(shù)據(jù)(數(shù)據(jù)成員)及處理數(shù)據(jù)的函數(shù)(成員函數(shù))組成。類的定義格式為: class public: /定義公有數(shù)據(jù)成員或成員函數(shù), private: /定義私有數(shù)據(jù)成員或成員函數(shù) protected: /定義保護(hù)數(shù)據(jù)成員或成員函數(shù) 成員的訪問屬性public(公

18、有成員)private(私有成員)protected(保護(hù)成員)公有數(shù)據(jù)成員允許類內(nèi)或類外函數(shù)訪問公有成員函數(shù)允許在類內(nèi)或類外調(diào)用私有數(shù)據(jù)成員只允許類內(nèi)函數(shù)訪問私有成員函數(shù)只允許在類內(nèi)調(diào)用保護(hù)數(shù)據(jù)成員只允許類或其子類中函 數(shù)訪問保護(hù)成員函數(shù)允許在類內(nèi)或其子類中調(diào)用2.對象 對象對象:用類定義的變量稱為對象。對象的定義格式: , , ; 對象的成員分為數(shù)據(jù)成員與成員函數(shù)兩類。 在類外: 數(shù)據(jù)成員引用方式為:.; 成員函數(shù)的調(diào)用方式為:.(實(shí)參); 在類內(nèi)引用或調(diào)用時,不寫對象名。3.構(gòu)造函數(shù)與析構(gòu)函數(shù) (1)構(gòu)造函數(shù)用于對象數(shù)據(jù)成員的初始化。構(gòu)造函數(shù)名必須與類名相同,且無返回類型。 構(gòu)造函數(shù)允許

19、重載,將無參或有默認(rèn)值參數(shù)的構(gòu)造函數(shù)稱為默認(rèn)的構(gòu)造函數(shù)。當(dāng)用戶沒有定義構(gòu)造函數(shù)時,系統(tǒng)會自動產(chǎn)生一個默認(rèn)的構(gòu)造函數(shù),該構(gòu)造函數(shù)體為空。 常用的構(gòu)造函數(shù)有三類:有參構(gòu)造函數(shù)、無參構(gòu)造函數(shù)與拷貝構(gòu)造函數(shù)??截悩?gòu)造函數(shù)的形參必須為類的對象。 構(gòu)造函數(shù)與析構(gòu)函數(shù)(2)析造函數(shù)名由類名前加“”組成,且無參數(shù)及返回類型。其作用是撤消對象,并回收對象占用的內(nèi)存空間。 (3)構(gòu)造與析構(gòu)函數(shù)的調(diào)用 用類說明一個對象時,系統(tǒng)先為其分配內(nèi)存空間,再調(diào)用構(gòu)造函數(shù)對數(shù)據(jù)成員進(jìn)行初始化。當(dāng)對象結(jié)束其生命期,系統(tǒng)調(diào)用析構(gòu)函數(shù),回收對象所占用的內(nèi)存空間。構(gòu)造函數(shù)與析構(gòu)函數(shù)(4)構(gòu)造函數(shù)與對象成員 在建立新類時,允許用已存在的

20、類定義對象成員,類的構(gòu)造函數(shù)格式為: :(形參):(實(shí)參表1) ,(實(shí)參表2),(實(shí)參表n) 函數(shù)體 構(gòu)造函數(shù)的調(diào)用順序是,先調(diào)用各對象成員的構(gòu)造函數(shù),再調(diào)用類本身的構(gòu)造函數(shù)。 析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)正好相反。4.new與delete 運(yùn)算符 new 運(yùn)算符用于動態(tài)建立對象,用new動態(tài)建立對象時,系統(tǒng)先為對象分配內(nèi)存空間,后調(diào)用構(gòu)造函數(shù)對對象初始化。用new運(yùn)算符動態(tài)建立的對象,必須用delete運(yùn)算符撤消。 delete運(yùn)算符用于撤消動態(tài)建立的對象,用delete 運(yùn)算符撤消動態(tài)建立的對象時,系統(tǒng)先調(diào)用析構(gòu)函數(shù),并由析構(gòu)函數(shù)回收對象占用的內(nèi)存空間。 5.this指針 用類定義一個對象

21、時,由系統(tǒng)自動建立指向該對象的指針稱為this指針。 this 指針的默認(rèn)定義格式: * const this=& 對象; 例9.1(1)#include struct student char name8; /學(xué)生姓名 float phi,math,ave; /物理、數(shù)學(xué)、平均成績 ;void average(student &s) /計算平均成績 s.ave=(s.phi+s.math)/2;void display(student s) /輸入姓名與成績 couts.namets.phits.mathts.avestu.namestu.phistu.math; /輸入姓名

22、與成績 average(stu); /計算平均成績 display(stu); /顯示輸出學(xué)生成績 返回返回例9.2(1)#include # include class student private: char name8; /定義姓名、物理、數(shù)學(xué)、平均成績 float phi,math,ave; /為私有數(shù)據(jù)成員 public: void input(char name,float phi,float math) /定義input() strcpy(name,name); phi=phi; math=math; 例9.2(2) void average(void) /定義average(

23、) ave=(phi+math)/2; void display( void) /定義display() coutnametphitmathtaven; void output(char name,float &phi,float &math,float &ava) strcpy(name,name); /定義output() phi=phi; math=math; ave=ave; ; 返回返回例9.4(1)#include # include class student private: char name8; float phi,math,ave; public:

24、 void input(char name,float phi,float math); void average(void) ave=(phi+math)/2; void display( void) coutnametphitmathtaven; void output(char name,float &phi,float &math,float &ave); ; 例9.4(2)void student:input(char name,float phi,float math) strcpy(name,name); phi=phi; math=math; void

25、student:output(char name,float &phi,float &math,float &ave) strcpy(name,name); phi=phi; math=math; ave=ave; 例9.4(3)void main(void) student stu1,stu2; char name8; float phi,math,ave; coutnamephimath; stu1.input(name,phi,math); stu1.average(); stu1.output(name,phi,math,ave); coutnametphitm

26、athtaveendl; stu2=stu1; stu2.display(); 例9.4(4)程序執(zhí)行后提示與輸出如下: 請輸入學(xué)生姓名、物理與數(shù)學(xué)成績: zhou 90 80 zhou 90 80 85 zhou 90 80 85 返回返回例9.5(1)#include # include class student private: char name8; float phi,math,ave; public: student(char name,float phi,float math); void display( void) coutnametphitmathtaven; void

27、average(void) ave=(phi+math)/2; ; 例9.5(2)student:student(char name,float phi,float math) strcpy(name,name); phi=phi; math=math; void main(void) student stu1(zhou,90,80); stu1.average(); stu1.display() ; 程序執(zhí)行后輸出: zhou 90 80 85 返回返回 例9.6(1)# include # include class rectangle private: int left, top, ri

28、ght,bottom; public: rectangle(int l, int t, int r,int b) cout 調(diào)用帶參構(gòu)造函數(shù)endl; left=l; top=t; right=r;bottom=b; rectangle( ) cout 調(diào)用無參構(gòu)造函數(shù)endl; left=0; top=0; right=0;bottom=0; int area(void) return abs( (right-left)*(bottom-top);例9.6(2)void main (void) rectangle r1(100, 50, 200,100); cout矩形r1的面積=r1.ar

29、ea()endl; rectangle r2; cout矩形r2的面積=r2.area()endl;程序執(zhí)行后輸出: 調(diào)用帶參構(gòu)造函數(shù) 矩形r1的面積=5000 調(diào)用無參構(gòu)造函數(shù) 矩形r2的面積=0 返回返回例9.7(1)# include # include class rectangle private: int left,right,top,bottom; public: rectangle(int l,int r,int t,int b) cout調(diào)用帶參構(gòu)造函數(shù)endl; left=l;right=r;top=t;bottom=b; 例9.7(2) rectangle( ) cout

30、 調(diào)用無參構(gòu)造函數(shù)endl; left=0; top=0; right=0;bottom=0; rectangle(rectangle &r ) cout調(diào)用拷貝構(gòu)造函數(shù)endl; left=r.left;right=r.right; top=r.top;bottom=r.bottom; int area(void) return abs(right-left)*(bottom-top);例9.7(3) void main (void) rectangle r1(100,200,50,100); cout矩形r1的面積=r1.area()endl; rectangle r2; cout

31、矩形r2的面積=r2.area()endl; rectangle r3 (r1);/調(diào)用拷貝構(gòu)造函數(shù)初始化r3 cout矩形r3 例9.7(4)程序執(zhí)行后輸出: 調(diào)用帶參構(gòu)造函數(shù) 矩形r1的面積=5000 調(diào)用無參構(gòu)造函數(shù) 矩形r2的面積=0 調(diào)用拷貝構(gòu)造函數(shù) 矩形r3的面積=5000 返回返回例9.8(1)# include # include class rectangle private: int left, top, right,bottom; public: rectangle(int l, int t, int r,int b) cout 調(diào)用帶參構(gòu)造函數(shù)endl; left=l;

32、 top=t; right=r;bottom=b; 例9.8(2) rectangle( ) cout 調(diào)用無參構(gòu)造函數(shù)endl; left=0; top=0; right=0;bottom=0; int area(void) return abs(right-left)*(bottom-top); ;例9.8(3) void main (void) rectangle *pr1= new rectangle (100,50, 200,100); cout矩形r1的面積=area()endl; rectangle *pr2=new rectangle; cout矩形r2的面積=area()en

33、dl; delete pr1; delete pr2; 例9.8(4)程序執(zhí)行后輸出: 調(diào)用帶參構(gòu)造函數(shù) 矩形r1的面積=5000 調(diào)用無參構(gòu)造函數(shù) 矩形r2的面積=0 返回返回例9.9(1)# include # include class rectangle private: int left,top, right,bottom; public: rectangle(int l,int t, int r,int b) cout 調(diào)用帶參構(gòu)造函數(shù)rectangle(int l,int t, int r,int b) endl; left=l;top=t; right=r;bottom=b;

34、例9.9(2)rectangle(int r,int b ) cout 調(diào)用帶參構(gòu)造函數(shù)rectangle(int r,int b ) endl; left=0; top=0;right=r; bottom=b; rectangle( ) cout調(diào)用了析構(gòu)函數(shù)!endl; int area(void) return abs(right-left)*(bottom-top);void main (void) rectangle r1(100,200,50,100); cout矩形r1的面積=r1.area()endl; 例9.9(3)rectangle r2 (100,100); cout矩形

35、r2的面積=r2.area()endl;執(zhí)行程序后輸出: 調(diào)用帶參構(gòu)造函數(shù)rectangle(int l,int r,int t,int b) 矩形r1的面積=5000 調(diào)用帶參構(gòu)造函數(shù)rectangle(int r,int b ) 矩形r2的面積=10000 調(diào)用了析構(gòu)函數(shù)! 調(diào)用了析構(gòu)函數(shù)! 返回返回例9.10(1)# include class complex private: float real,image; /定義復(fù)數(shù)實(shí)部與虛部為私有數(shù)據(jù)成員public: complex(float r=0,float i=0) /定義帶參構(gòu)造函數(shù) cout調(diào)用帶參構(gòu)造函數(shù)!endl; real=

36、r;image=i; complex(complex &c) /定義拷貝構(gòu)造函數(shù) cout 調(diào)用拷貝構(gòu)造函數(shù)!endl; real=c.real; image=c.image; 例9.10(2) complex() cout調(diào)用析構(gòu)函數(shù)!endl; void show(int i) coutci=real+imageiendl;void main(void) complex c1(10,20); c1.show(1); complex c2(c1); c2.show(2); complex c3; c3.show(3);例9.10(3)程序執(zhí)行后輸出: 調(diào)用帶參構(gòu)造函數(shù)! c1=10+

37、20i 調(diào)用拷貝構(gòu)造函數(shù)! c2=10+20i 調(diào)用帶參構(gòu)造函數(shù)! c3=0 + 0 i 調(diào)用析構(gòu)函數(shù)! 調(diào)用析構(gòu)函數(shù)! 調(diào)用析構(gòu)函數(shù)! 返回返回例9.11(1)# include class complex public: float real,image; public: complex(float r,float i) real=r; image=i; cout調(diào)用帶參構(gòu)造函數(shù)complex(float ,float) endl; complex() real=0; image=0; cout調(diào)用無參構(gòu)造函數(shù)complex( ) endl; 例9.11(2) complex() cout調(diào)用了析構(gòu)函數(shù)!endl; void show(int i) /定義顯示復(fù)數(shù)成員函數(shù) coutci =real+imageishow

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論