C語言程序設(shè)計第6章 類與對象_第1頁
C語言程序設(shè)計第6章 類與對象_第2頁
C語言程序設(shè)計第6章 類與對象_第3頁
C語言程序設(shè)計第6章 類與對象_第4頁
C語言程序設(shè)計第6章 類與對象_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、整理課件 第第6章章 類與對象類與對象6.1 從面向過程到面向?qū)ο髲拿嫦蜻^程到面向?qū)ο?.2 類與對象的定義類與對象的定義6.3 對象的初始化對象的初始化6.4 對象數(shù)組與對象指針對象數(shù)組與對象指針6.5 靜態(tài)成員靜態(tài)成員6.6 友元友元6.7 常對象和常成員常對象和常成員6.8 程序?qū)嵗绦驅(qū)嵗碚n件6.1 從面向過程到面向?qū)ο髲拿嫦蜻^程到面向?qū)ο?.1.1 面向?qū)ο蟪绦蛟O(shè)計的基本概念面向?qū)ο蟪绦蛟O(shè)計的基本概念1對象與方法對象與方法對象是指現(xiàn)實世界中具體存在的實體。每一個對象是指現(xiàn)實世界中具體存在的實體。每一個對象都有自己的屬性(包括自己特有的屬性和對象都有自己的屬性(包括自己特有的屬性和

2、同類對象的共同屬性)。屬性反映對象自身狀同類對象的共同屬性)。屬性反映對象自身狀態(tài)變化,表現(xiàn)為當(dāng)前的屬性值。態(tài)變化,表現(xiàn)為當(dāng)前的屬性值。方法是用來描述對象動態(tài)特征的一個操作序列。方法是用來描述對象動態(tài)特征的一個操作序列。消息是用來請求對象執(zhí)行某一操作或回答某些消息是用來請求對象執(zhí)行某一操作或回答某些信息的要求。實際上是一個對象對另一個對象信息的要求。實際上是一個對象對另一個對象的調(diào)用。的調(diào)用。整理課件2類類類是具有相同屬性和方法的一組對象的集合,類是具有相同屬性和方法的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描它為屬于該類的全部對象提供了統(tǒng)一的抽象描述。將相似的對象分組形成一個類

3、,每個這樣述。將相似的對象分組形成一個類,每個這樣的對象被稱為類的一個實例,一個類中的所有的對象被稱為類的一個實例,一個類中的所有對象共享一個公共的定義,盡管它們對屬性所對象共享一個公共的定義,盡管它們對屬性所賦予的值不同。賦予的值不同。整理課件3封裝封裝封裝(封裝(Encapsulation)是指把對象屬性和操)是指把對象屬性和操作結(jié)合在一起,構(gòu)成獨立的單元,它的內(nèi)部作結(jié)合在一起,構(gòu)成獨立的單元,它的內(nèi)部信息對外界是隱蔽的,不允許外界直接存取信息對外界是隱蔽的,不允許外界直接存取對象的屬性,只能通過有限的接口與對象發(fā)對象的屬性,只能通過有限的接口與對象發(fā)生聯(lián)系。生聯(lián)系。整理課件4繼承繼承繼承

4、(繼承(Inheritance)反映的是類與類之間抽象級)反映的是類與類之間抽象級別的不同,根據(jù)繼承與被繼承的關(guān)系,可分為基別的不同,根據(jù)繼承與被繼承的關(guān)系,可分為基類和衍類,基類也稱為父類,衍類也稱為子類。類和衍類,基類也稱為父類,衍類也稱為子類。子類將從父類那里獲得所有的屬性和方法,并且子類將從父類那里獲得所有的屬性和方法,并且可以對這些獲得的屬性和方法加以改造,使之具可以對這些獲得的屬性和方法加以改造,使之具有自己的特點。一個父類可以派生出若干子類,有自己的特點。一個父類可以派生出若干子類,每個子類都可以通過繼承和改造獲得自己的一套每個子類都可以通過繼承和改造獲得自己的一套屬性和方法,由

5、此,父類表現(xiàn)出的是共性和一般屬性和方法,由此,父類表現(xiàn)出的是共性和一般性,子類表現(xiàn)出的是個性和特性,父類的抽象級性,子類表現(xiàn)出的是個性和特性,父類的抽象級別高于子類。繼承具有傳遞性。繼承使得程序設(shè)別高于子類。繼承具有傳遞性。繼承使得程序設(shè)計人員可以在已有的類的基礎(chǔ)上定義和實現(xiàn)新類,計人員可以在已有的類的基礎(chǔ)上定義和實現(xiàn)新類,所以有效地支持了軟件構(gòu)件的復(fù)用。所以有效地支持了軟件構(gòu)件的復(fù)用。整理課件5多態(tài)性多態(tài)性不同的對象收到相同的消息產(chǎn)生不同的動作,不同的對象收到相同的消息產(chǎn)生不同的動作,這種功能稱為多態(tài)性(這種功能稱為多態(tài)性(Polymorphism)。將)。將多態(tài)的概念應(yīng)用于面向?qū)ο蟪绦蛟O(shè)計

6、,增強了多態(tài)的概念應(yīng)用于面向?qū)ο蟪绦蛟O(shè)計,增強了程序?qū)陀^世界的模擬性,使得對象程序具有程序?qū)陀^世界的模擬性,使得對象程序具有了更好的可讀性,更易于理解,而且顯著提高了更好的可讀性,更易于理解,而且顯著提高了軟件的可復(fù)用性和可擴充性。了軟件的可復(fù)用性和可擴充性。整理課件6.1.2 C+面向?qū)ο蟪绦虻慕Y(jié)構(gòu)面向?qū)ο蟪绦虻慕Y(jié)構(gòu)一個面向?qū)ο蟮囊粋€面向?qū)ο蟮腃+程序一般由類的聲明和類程序一般由類的聲明和類的使用兩部分組成。類的使用部分一般由主函的使用兩部分組成。類的使用部分一般由主函數(shù)和有關(guān)子函數(shù)組成。數(shù)和有關(guān)子函數(shù)組成。整理課件以下是一個典型的以下是一個典型的C+程序結(jié)構(gòu)。程序結(jié)構(gòu)。#include

7、 /類的定義部分類的定義部分class C int x,y,z; /類類C的數(shù)據(jù)成員聲明的數(shù)據(jù)成員聲明f(); /類類C的成員函數(shù)聲明的成員函數(shù)聲明;/類的使用部分類的使用部分void main() C a; /建立一個類建立一個類C的對象的對象aa.f(); /給對象給對象a發(fā)消息,調(diào)用成員函數(shù)發(fā)消息,調(diào)用成員函數(shù)f()整理課件在在C+程序中,程序設(shè)計始終圍繞程序中,程序設(shè)計始終圍繞“類類”展開。展開。通過聲明類,構(gòu)建了程序所要完成的功能,體通過聲明類,構(gòu)建了程序所要完成的功能,體現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計的思想。下面看一個具現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計的思想。下面看一個具體的例子,直觀地了解一下面向?qū)ο?/p>

8、程序設(shè)計體的例子,直觀地了解一下面向?qū)ο蟪绦蛟O(shè)計方法與結(jié)構(gòu)化程序設(shè)計方法的區(qū)別。方法與結(jié)構(gòu)化程序設(shè)計方法的區(qū)別?!纠纠?.1】 類的應(yīng)用示例。類的應(yīng)用示例。整理課件6.2 類與對象的定義類與對象的定義6.2.1 類的定義類的定義在在C+中,一個類指定一個獨立的對象集合,中,一個類指定一個獨立的對象集合,該對象集合由組成該類的對象以及這些對象所該對象集合由組成該類的對象以及這些對象所允許的操作組成。允許的操作組成。整理課件1類的定義形式類的定義形式類定義的一般形式如下:類定義的一般形式如下:class 類名類名 public:數(shù)據(jù)成員或成員函數(shù)的定義數(shù)據(jù)成員或成員函數(shù)的定義private:數(shù)據(jù)

9、成員或成員函數(shù)的定義數(shù)據(jù)成員或成員函數(shù)的定義protected:數(shù)據(jù)成員或成員函數(shù)的定義數(shù)據(jù)成員或成員函數(shù)的定義;整理課件2類成員函數(shù)的定義類成員函數(shù)的定義對類的成員函數(shù)的定義通常有兩種形式,一種對類的成員函數(shù)的定義通常有兩種形式,一種是在類的定義中直接定義函數(shù),一種是在類外是在類的定義中直接定義函數(shù),一種是在類外定義。前面的例定義。前面的例6.1就是在類內(nèi)部實現(xiàn)成員函就是在類內(nèi)部實現(xiàn)成員函數(shù),下面再看一個例子。數(shù),下面再看一個例子?!纠纠?.2】 已知已知y,當(dāng),當(dāng)f(n)122334n(n1)時,求時,求y的值。的值。整理課件按照類的定義形式,可以在類定義中只給出成按照類的定義形式,可以

10、在類定義中只給出成員函數(shù)的原型,而在類外部定義具體的成員函員函數(shù)的原型,而在類外部定義具體的成員函數(shù)。這種成員函數(shù)在類外定義的一般形式如下:數(shù)。這種成員函數(shù)在類外定義的一般形式如下:函數(shù)返回值的類型函數(shù)返回值的類型 類名類名:函數(shù)名函數(shù)名(形參表形參表)(函數(shù)體)(函數(shù)體)其中雙冒號其中雙冒號:是作用域運算符,它指出該函數(shù)是作用域運算符,它指出該函數(shù)是屬于哪一個類的成員函數(shù)。是屬于哪一個類的成員函數(shù)。整理課件6.2.2 對象的定義與使用對象的定義與使用1對象的定義對象的定義對象的定義形式如下:對象的定義形式如下:類名類名 對象名表對象名表;其中對象名表代表有多個對象名,各對象名之其中對象名表代

11、表有多個對象名,各對象名之間以逗號分隔。間以逗號分隔。整理課件2對象成員引用對象成員引用具體引用形式為:具體引用形式為:對象名對象名.數(shù)據(jù)成員名數(shù)據(jù)成員名對象名對象名.成員函數(shù)名成員函數(shù)名(實參表實參表)【例【例6.3】 定義一個時鐘類,類中有定義一個時鐘類,類中有3個私有個私有數(shù)據(jù)成員(數(shù)據(jù)成員(Hour、Minute和和Second)和兩個)和兩個公有成員函數(shù)(公有成員函數(shù)(SetTime和和ShowTime)。)。SetTime根據(jù)傳遞的根據(jù)傳遞的3個參數(shù)為對象設(shè)置時間,個參數(shù)為對象設(shè)置時間,ShowTime負責(zé)將對象表示的時間顯示輸出。負責(zé)將對象表示的時間顯示輸出。在主函數(shù)中,建立一個

12、時間類的對象,先利用在主函數(shù)中,建立一個時間類的對象,先利用默認時間設(shè)置,再設(shè)置時間為默認時間設(shè)置,再設(shè)置時間為10時時23分分45秒并秒并顯示該時間。顯示該時間。整理課件6.2.3 類與結(jié)構(gòu)體的區(qū)別類與結(jié)構(gòu)體的區(qū)別在在C+語言中,結(jié)構(gòu)體除了具有原先語言中,結(jié)構(gòu)體除了具有原先C語言定義語言定義的功能外,還具有類似于類的功能,即也可以的功能外,還具有類似于類的功能,即也可以在其中定義函數(shù)。它們之間的區(qū)別是:在結(jié)構(gòu)在其中定義函數(shù)。它們之間的區(qū)別是:在結(jié)構(gòu)體中,成員的默認訪問權(quán)限是體中,成員的默認訪問權(quán)限是public,而類成,而類成員的默認訪問權(quán)限是員的默認訪問權(quán)限是private?!纠纠?.4

13、】 用結(jié)構(gòu)體定義類的示例。用結(jié)構(gòu)體定義類的示例。整理課件6.3 對象的初始化對象的初始化在類的定義中不能給數(shù)據(jù)成員賦初值。在類的定義中不能給數(shù)據(jù)成員賦初值。從封裝的目的出發(fā),類的數(shù)據(jù)成員應(yīng)該多為私從封裝的目的出發(fā),類的數(shù)據(jù)成員應(yīng)該多為私有的,對私有數(shù)據(jù)成員的訪問只能通過成員函有的,對私有數(shù)據(jù)成員的訪問只能通過成員函數(shù),而不能通過成員引用的方式來賦值。數(shù),而不能通過成員引用的方式來賦值。C+中定義了一種特殊的初始化函數(shù),稱之為中定義了一種特殊的初始化函數(shù),稱之為構(gòu)造函數(shù)(構(gòu)造函數(shù)(Constructor)。在特定對象使用結(jié))。在特定對象使用結(jié)束時,還將進行一些清除工作。對象清除工作束時,還將進行

14、一些清除工作。對象清除工作由析構(gòu)函數(shù)(由析構(gòu)函數(shù)(Destructor)來完成。)來完成。整理課件6.3.1 構(gòu)造函數(shù)構(gòu)造函數(shù)1構(gòu)造函數(shù)的特點構(gòu)造函數(shù)的特點(1)構(gòu)造函數(shù)名與類名相同,且沒有返回值,)構(gòu)造函數(shù)名與類名相同,且沒有返回值,不能指定函數(shù)類型。不能指定函數(shù)類型。(2)構(gòu)造函數(shù)必須使具有公有屬性,但它不)構(gòu)造函數(shù)必須使具有公有屬性,但它不能像其它成員函數(shù)那樣被顯式地調(diào)用,它是在能像其它成員函數(shù)那樣被顯式地調(diào)用,它是在定義對象的同時被系統(tǒng)自動調(diào)用的。定義對象的同時被系統(tǒng)自動調(diào)用的。(3)構(gòu)造函數(shù)是特殊的成員函數(shù),函數(shù)體可)構(gòu)造函數(shù)是特殊的成員函數(shù),函數(shù)體可以寫在類體內(nèi),也可以寫在類體外。

15、以寫在類體內(nèi),也可以寫在類體外。(4)構(gòu)造函數(shù)可以重載,即一個類中可以定)構(gòu)造函數(shù)可以重載,即一個類中可以定義多個參數(shù)個數(shù)或參數(shù)類型不同的構(gòu)造函數(shù)。義多個參數(shù)個數(shù)或參數(shù)類型不同的構(gòu)造函數(shù)。整理課件【例【例6.5】 使用構(gòu)造函數(shù)替代例使用構(gòu)造函數(shù)替代例6.3中中SetTime()成員函數(shù),并在主函數(shù)中,使用構(gòu)造函數(shù)設(shè)置成員函數(shù),并在主函數(shù)中,使用構(gòu)造函數(shù)設(shè)置時間為時間為15時時19分分56秒并顯示該時間。秒并顯示該時間。構(gòu)造函數(shù)也可以重載。關(guān)于重載的概念將在第構(gòu)造函數(shù)也可以重載。關(guān)于重載的概念將在第7章詳細介紹,這里先看一個例子。章詳細介紹,這里先看一個例子?!纠纠?.6】 構(gòu)造函數(shù)重載定義示

16、例。構(gòu)造函數(shù)重載定義示例。整理課件綜上所述,構(gòu)造函數(shù)是一個有著特殊名字,在綜上所述,構(gòu)造函數(shù)是一個有著特殊名字,在對象創(chuàng)建時被自動調(diào)用的一種函數(shù),它的功能對象創(chuàng)建時被自動調(diào)用的一種函數(shù),它的功能就是完成對象的初始化。就是完成對象的初始化。整理課件2默認的構(gòu)造函數(shù)默認的構(gòu)造函數(shù)如果類定義中沒有給出構(gòu)造函數(shù),則如果類定義中沒有給出構(gòu)造函數(shù),則C+編譯器自動編譯器自動給出一個默認的構(gòu)造函數(shù),而且默認的構(gòu)造函數(shù)只能給出一個默認的構(gòu)造函數(shù),而且默認的構(gòu)造函數(shù)只能有一個,形式如下:有一個,形式如下:類名類名:默認構(gòu)造函數(shù)名默認構(gòu)造函數(shù)名() 若沒有定義過任何形式的構(gòu)造函數(shù),系統(tǒng)會自動生成若沒有定義過任何形

17、式的構(gòu)造函數(shù),系統(tǒng)會自動生成默認的構(gòu)造函數(shù)。若已經(jīng)定義過構(gòu)造函數(shù),則系統(tǒng)不默認的構(gòu)造函數(shù)。若已經(jīng)定義過構(gòu)造函數(shù),則系統(tǒng)不會自動生成默認的構(gòu)造函數(shù),一旦需要,則要求顯式會自動生成默認的構(gòu)造函數(shù),一旦需要,則要求顯式地定義這種形式的構(gòu)造函數(shù)。在程序中,若定義一個地定義這種形式的構(gòu)造函數(shù)。在程序中,若定義一個靜態(tài)對象而沒有指明初始值時,編譯器會按默認的構(gòu)靜態(tài)對象而沒有指明初始值時,編譯器會按默認的構(gòu)造函數(shù)對對象的數(shù)據(jù)成員初始化為造函數(shù)對對象的數(shù)據(jù)成員初始化為0或空?;蚩铡!纠纠?.7】 默認構(gòu)造函數(shù)示例。默認構(gòu)造函數(shù)示例?!纠纠?.8】 構(gòu)造函數(shù)的調(diào)用。構(gòu)造函數(shù)的調(diào)用。整理課件6.3.2 析構(gòu)函

18、數(shù)析構(gòu)函數(shù)1析構(gòu)函數(shù)的特點析構(gòu)函數(shù)的特點當(dāng)對象創(chuàng)建時,會自動調(diào)用構(gòu)造函數(shù)進行初始當(dāng)對象創(chuàng)建時,會自動調(diào)用構(gòu)造函數(shù)進行初始化。當(dāng)對象撤消時,也會自動調(diào)用析構(gòu)函數(shù)進化。當(dāng)對象撤消時,也會自動調(diào)用析構(gòu)函數(shù)進行一些清理工作,如釋放分配給對象的內(nèi)存空行一些清理工作,如釋放分配給對象的內(nèi)存空間等。與構(gòu)造函數(shù)類似的是:析構(gòu)函數(shù)也與類間等。與構(gòu)造函數(shù)類似的是:析構(gòu)函數(shù)也與類同名,但在名字前有一個同名,但在名字前有一個“”符號,析構(gòu)函數(shù)符號,析構(gòu)函數(shù)也具有公有屬性,也沒有返回類型和返回值,也具有公有屬性,也沒有返回類型和返回值,但析構(gòu)函數(shù)不帶參數(shù),不能重載,所以析構(gòu)函但析構(gòu)函數(shù)不帶參數(shù),不能重載,所以析構(gòu)函數(shù)只

19、有一個。數(shù)只有一個。【例【例6.9】 析構(gòu)函數(shù)程序舉例。析構(gòu)函數(shù)程序舉例。整理課件2默認的析構(gòu)函數(shù)默認的析構(gòu)函數(shù)和默認構(gòu)造函數(shù)一樣,如果類定義中沒有給出析構(gòu)函和默認構(gòu)造函數(shù)一樣,如果類定義中沒有給出析構(gòu)函數(shù),系統(tǒng)也會自動生成一個默認的析構(gòu)函數(shù),其格式數(shù),系統(tǒng)也會自動生成一個默認的析構(gòu)函數(shù),其格式如下:如下:類名稱類名稱:默認析構(gòu)函數(shù)名默認析構(gòu)函數(shù)名() 例如,編譯系統(tǒng)為類例如,編譯系統(tǒng)為類Point生成默認的析構(gòu)函數(shù)如下:生成默認的析構(gòu)函數(shù)如下:Point:Point() 對于大多數(shù)類而言,默認的析構(gòu)函數(shù)就能滿足要求。對于大多數(shù)類而言,默認的析構(gòu)函數(shù)就能滿足要求。只有在一個對象完成其操作之前需

20、要做一些內(nèi)部處理只有在一個對象完成其操作之前需要做一些內(nèi)部處理時,才顯式地定義析構(gòu)函數(shù)。時,才顯式地定義析構(gòu)函數(shù)。整理課件6.3.3 復(fù)制構(gòu)造函數(shù)復(fù)制構(gòu)造函數(shù)復(fù)制構(gòu)造函數(shù)的作用是使用一個已存在的對象復(fù)制構(gòu)造函數(shù)的作用是使用一個已存在的對象去初始化另一個同類對象,它也是一種構(gòu)造函去初始化另一個同類對象,它也是一種構(gòu)造函數(shù),除了具有一般構(gòu)造函數(shù)的特征外,它還具數(shù),除了具有一般構(gòu)造函數(shù)的特征外,它還具有如下特點:有如下特點:(1)其形參必須是本類的對象的引用。)其形參必須是本類的對象的引用。(2)某函數(shù)的形參是類的對象,調(diào)用該函數(shù)需)某函數(shù)的形參是類的對象,調(diào)用該函數(shù)需要復(fù)制構(gòu)造函數(shù)進行形參和實參結(jié)

21、合。要復(fù)制構(gòu)造函數(shù)進行形參和實參結(jié)合。(3)函數(shù)的返值是類的對象,函數(shù)調(diào)用返回的)函數(shù)的返值是類的對象,函數(shù)調(diào)用返回的時候需要調(diào)用復(fù)制構(gòu)造函數(shù)實現(xiàn)類對象的賦值。時候需要調(diào)用復(fù)制構(gòu)造函數(shù)實現(xiàn)類對象的賦值。整理課件復(fù)制構(gòu)造函數(shù)的定義格式如下:復(fù)制構(gòu)造函數(shù)的定義格式如下:類名類名:復(fù)制構(gòu)造函數(shù)名復(fù)制構(gòu)造函數(shù)名(const 類名類名 &對象名對象名)(函數(shù)體函數(shù)體)復(fù)制構(gòu)造函數(shù)與類同名,復(fù)制構(gòu)造函數(shù)與類同名,const是類型修飾符,是類型修飾符,被其修飾的對象是個不能被更新的常量。被其修飾的對象是個不能被更新的常量。【例【例6.10】 默認復(fù)制構(gòu)造函數(shù)示例。默認復(fù)制構(gòu)造函數(shù)示例。【例【例6.1

22、1】 復(fù)制構(gòu)造函數(shù)示例。復(fù)制構(gòu)造函數(shù)示例。整理課件普通構(gòu)造函數(shù)在建立對象時被調(diào)用,而復(fù)制構(gòu)造函數(shù)普通構(gòu)造函數(shù)在建立對象時被調(diào)用,而復(fù)制構(gòu)造函數(shù)在用已有對象初始化一個新對象時被調(diào)用。復(fù)制構(gòu)造在用已有對象初始化一個新對象時被調(diào)用。復(fù)制構(gòu)造函數(shù)被調(diào)用通常發(fā)生在以下函數(shù)被調(diào)用通常發(fā)生在以下3種情況:種情況:(1)程序中需要新建一個對象,并用一個類的對象)程序中需要新建一個對象,并用一個類的對象去初始化類的另一個對象的時候。去初始化類的另一個對象的時候。(2)當(dāng)對象作函數(shù)參數(shù)時,調(diào)用該函數(shù)時需要將實)當(dāng)對象作函數(shù)參數(shù)時,調(diào)用該函數(shù)時需要將實參對象完整地傳遞給形參,這就需要按實參復(fù)制一個參對象完整地傳遞給

23、形參,這就需要按實參復(fù)制一個形參,系統(tǒng)是通過調(diào)用復(fù)制構(gòu)造函數(shù)來實現(xiàn)的,這樣形參,系統(tǒng)是通過調(diào)用復(fù)制構(gòu)造函數(shù)來實現(xiàn)的,這樣能保證形參具有和實參完全相同的值。能保證形參具有和實參完全相同的值。(3)當(dāng)函數(shù)的返回值是類的對象。在函數(shù)調(diào)用完畢)當(dāng)函數(shù)的返回值是類的對象。在函數(shù)調(diào)用完畢需要將返回值帶回函數(shù)調(diào)用處時,此時需要將函數(shù)中需要將返回值帶回函數(shù)調(diào)用處時,此時需要將函數(shù)中的對象復(fù)制一個臨時對象并傳給該函數(shù)的調(diào)用處。的對象復(fù)制一個臨時對象并傳給該函數(shù)的調(diào)用處。以上以上3種調(diào)用復(fù)制構(gòu)造函數(shù)都是由編譯系統(tǒng)自動完成種調(diào)用復(fù)制構(gòu)造函數(shù)都是由編譯系統(tǒng)自動完成的,不必由用戶自己去調(diào)用。的,不必由用戶自己去調(diào)用。整

24、理課件6.4 對象數(shù)組與對象指針對象數(shù)組與對象指針6.4.1 對象數(shù)組對象數(shù)組對象數(shù)組是指數(shù)組的每一個元素都是相同類型對象的對象數(shù)組是指數(shù)組的每一個元素都是相同類型對象的數(shù)組,也就是說,若一個類有若干個對象,把這一系數(shù)組,也就是說,若一個類有若干個對象,把這一系列的對象用一個數(shù)組來表示。對象數(shù)組的元素是對象,列的對象用一個數(shù)組來表示。對象數(shù)組的元素是對象,不僅具有數(shù)據(jù)成員,而且還有成員函數(shù)。不僅具有數(shù)據(jù)成員,而且還有成員函數(shù)。對象數(shù)組的定義和普通數(shù)組的定義類似,一般格式如對象數(shù)組的定義和普通數(shù)組的定義類似,一般格式如下:下:類名類名 數(shù)組名數(shù)組名第一維大小第一維大小第二維數(shù)組大小第二維數(shù)組大小

25、其中,類名是指該數(shù)組元素屬于該類的對象,方括號其中,類名是指該數(shù)組元素屬于該類的對象,方括號內(nèi)的數(shù)組大小給出了某一維元素的個數(shù)。一維對象數(shù)內(nèi)的數(shù)組大小給出了某一維元素的個數(shù)。一維對象數(shù)組只有一對方括號,二維對象數(shù)組要有兩個方括號對,組只有一對方括號,二維對象數(shù)組要有兩個方括號對,等等。等等。整理課件與普通數(shù)組一樣,在使用對象數(shù)組時也只能訪與普通數(shù)組一樣,在使用對象數(shù)組時也只能訪問單個數(shù)組元素,也就是一個對象,通過這個問單個數(shù)組元素,也就是一個對象,通過這個對象,可以訪問它的公有成員,一般形式如下:對象,可以訪問它的公有成員,一般形式如下:數(shù)組名數(shù)組名下標(biāo)下標(biāo).成員名成員名和普通數(shù)組一樣,對象數(shù)

26、組既可以在定義時初和普通數(shù)組一樣,對象數(shù)組既可以在定義時初始化,也可以在定義后賦值。始化,也可以在定義后賦值?!纠纠?.12】 對象數(shù)組應(yīng)用示例。對象數(shù)組應(yīng)用示例。整理課件6.4.2 對象指針對象指針對象指針就是指向?qū)ο蟮闹羔?,其定義的格式如下:對象指針就是指向?qū)ο蟮闹羔?,其定義的格式如下:類名類名 *對象指針名對象指針名;對象成員也可以通過指向?qū)ο蟮闹羔榿硪茫脭?shù)對象成員也可以通過指向?qū)ο蟮闹羔榿硪?,引用?shù)據(jù)成員的具體形式如下:據(jù)成員的具體形式如下:指向?qū)ο蟮闹羔樦赶驅(qū)ο蟮闹羔?數(shù)據(jù)成員名數(shù)據(jù)成員名或:或:(*指向?qū)ο蟮闹羔樦赶驅(qū)ο蟮闹羔?.數(shù)據(jù)成員名數(shù)據(jù)成員名引用成員函數(shù)的具體形式

27、如下:引用成員函數(shù)的具體形式如下:指向?qū)ο蟮闹羔樦赶驅(qū)ο蟮闹羔?成員函數(shù)名成員函數(shù)名(實參表實參表)或:或:(*指向?qū)ο蟮闹羔樦赶驅(qū)ο蟮闹羔?.成員函數(shù)名成員函數(shù)名(實參表實參表)【例【例6.13】 對象指針應(yīng)用示例。對象指針應(yīng)用示例。整理課件6.4.3 指向類成員的指針指向類成員的指針1指向數(shù)據(jù)成員的指針指向數(shù)據(jù)成員的指針指向數(shù)據(jù)成員的指針定義格式如下:指向數(shù)據(jù)成員的指針定義格式如下:類型說明符類型說明符 類名類名:*數(shù)據(jù)成員指針名數(shù)據(jù)成員指針名;定義了指向數(shù)據(jù)成員的指針后,需要對其進行賦值,定義了指向數(shù)據(jù)成員的指針后,需要對其進行賦值,也就是要確定指向類的哪一個成員。對數(shù)據(jù)成員指針也就是要

28、確定指向類的哪一個成員。對數(shù)據(jù)成員指針賦值的一般格式如下:賦值的一般格式如下:數(shù)據(jù)成員指針名數(shù)據(jù)成員指針名=&類名類名:數(shù)據(jù)成員名數(shù)據(jù)成員名;將指針指向類的數(shù)據(jù)成員后,就可以通過類的對象引將指針指向類的數(shù)據(jù)成員后,就可以通過類的對象引用指針?biāo)赶虻臄?shù)據(jù)成員,其格式有兩種:用指針?biāo)赶虻臄?shù)據(jù)成員,其格式有兩種:對象名對象名.*數(shù)據(jù)成員指針名數(shù)據(jù)成員指針名;或:或:對象指針名對象指針名-*數(shù)據(jù)成員指針名數(shù)據(jù)成員指針名;【例【例6.14】 指向數(shù)據(jù)成員指針應(yīng)用舉例。指向數(shù)據(jù)成員指針應(yīng)用舉例。整理課件2指向成員函數(shù)的指針指向成員函數(shù)的指針指向成員函數(shù)的指針定義格式如下:指向成員函數(shù)的指針定義格

29、式如下:函數(shù)返回值類型函數(shù)返回值類型 (類名類名:* 成員函數(shù)指針名成員函數(shù)指針名)(參數(shù)表參數(shù)表);定義成員函數(shù)指針后要對其賦值,也就是確定指向類定義成員函數(shù)指針后要對其賦值,也就是確定指向類的哪一個成員函數(shù)。給指向成員函數(shù)指針賦值的一般的哪一個成員函數(shù)。給指向成員函數(shù)指針賦值的一般格式如下:格式如下:成員函數(shù)指針名成員函數(shù)指針名=&類名類名:成員函數(shù)名成員函數(shù)名;調(diào)用成員函數(shù)指針?biāo)赶蚝瘮?shù)的格式如下:調(diào)用成員函數(shù)指針?biāo)赶蚝瘮?shù)的格式如下:(對象名對象名.*成員函數(shù)指針名成員函數(shù)指針名)(實參表實參表)或:或:(對象指針名對象指針名-*成員函數(shù)指針名成員函數(shù)指針名)(實參表實參表)【

30、例【例6.15】 指向類成員函數(shù)指針應(yīng)用舉例。指向類成員函數(shù)指針應(yīng)用舉例。整理課件6.4.4 this指針指針類的每一個成員函數(shù)都有一個隱含的常量指針,類的每一個成員函數(shù)都有一個隱含的常量指針,通常稱為通常稱為this指針。指針。this指針的類型就是成員函指針的類型就是成員函數(shù)所屬類的類型。當(dāng)調(diào)用成員函數(shù)時,它被初數(shù)所屬類的類型。當(dāng)調(diào)用成員函數(shù)時,它被初始化為被調(diào)用函數(shù)的對象的地址。始化為被調(diào)用函數(shù)的對象的地址。this指針在系指針在系統(tǒng)中是隱含地存在的,也可以顯式地使用。統(tǒng)中是隱含地存在的,也可以顯式地使用?!纠纠?.16】 this指針應(yīng)用舉例。指針應(yīng)用舉例。需要注意的是,需要注意的是

31、,this指針是一個指針是一個const指針,不指針,不能在程序中修改它,而且能在程序中修改它,而且this指針的作用域僅在指針的作用域僅在一個對象的內(nèi)部。一個對象的內(nèi)部。整理課件6.5 靜態(tài)成員靜態(tài)成員6.5.1 靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員靜態(tài)數(shù)據(jù)成員的定義格式如下:靜態(tài)數(shù)據(jù)成員的定義格式如下:static 數(shù)據(jù)類型數(shù)據(jù)類型 變量名變量名;靜態(tài)數(shù)據(jù)成員初始化的方式也與一般的數(shù)據(jù)成員不同。靜態(tài)數(shù)據(jù)成員初始化的方式也與一般的數(shù)據(jù)成員不同。靜態(tài)數(shù)據(jù)成員初始化應(yīng)在類外進行,而且應(yīng)在對象定靜態(tài)數(shù)據(jù)成員初始化應(yīng)在類外進行,而且應(yīng)在對象定義之前。一般在義之前。一般在main()函數(shù)之前,類定義之后的位置函數(shù)

32、之前,類定義之后的位置對它進行初始化,格式如下:對它進行初始化,格式如下:數(shù)據(jù)類型數(shù)據(jù)類型 類名類名:靜態(tài)數(shù)據(jù)成員名初始值靜態(tài)數(shù)據(jù)成員名初始值;引用靜態(tài)數(shù)據(jù)成員的格式如下:引用靜態(tài)數(shù)據(jù)成員的格式如下:類名類名:靜態(tài)數(shù)據(jù)成員名靜態(tài)數(shù)據(jù)成員名【例【例6.17】 靜態(tài)數(shù)據(jù)成員應(yīng)用舉例。靜態(tài)數(shù)據(jù)成員應(yīng)用舉例。整理課件6.5.2 靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)定義靜態(tài)成員函數(shù)的格式如下:定義靜態(tài)成員函數(shù)的格式如下:static 函數(shù)返回值的類型函數(shù)返回值的類型 靜態(tài)成員函數(shù)名靜態(tài)成員函數(shù)名(形參形參表表)(函數(shù)體函數(shù)體)整理課件靜態(tài)成員函數(shù)僅能訪問靜態(tài)的數(shù)據(jù)成員,不能訪問非靜態(tài)成員函數(shù)僅能訪問靜態(tài)的數(shù)據(jù)成員,

33、不能訪問非靜態(tài)的數(shù)據(jù)成員,也不能訪問非靜態(tài)的成員函數(shù),這靜態(tài)的數(shù)據(jù)成員,也不能訪問非靜態(tài)的成員函數(shù),這是由于靜態(tài)的成員函數(shù)沒有是由于靜態(tài)的成員函數(shù)沒有this指針。靜態(tài)成員函數(shù)指針。靜態(tài)成員函數(shù)的調(diào)用不需要對象名。類似于靜態(tài)的數(shù)據(jù)成員,公有的調(diào)用不需要對象名。類似于靜態(tài)的數(shù)據(jù)成員,公有的、靜態(tài)的成員函數(shù)在類外的調(diào)用方式如下:的、靜態(tài)的成員函數(shù)在類外的調(diào)用方式如下:類名類名:靜態(tài)成員函數(shù)名靜態(tài)成員函數(shù)名(實參表實參表)也允許用對象或指向?qū)ο蟮闹羔樥{(diào)用靜態(tài)成員函數(shù),也允許用對象或指向?qū)ο蟮闹羔樥{(diào)用靜態(tài)成員函數(shù),一般格式如下:一般格式如下:對象名對象名.靜態(tài)成員函數(shù)名靜態(tài)成員函數(shù)名(實參表實參表)對

34、象指針對象指針-靜態(tài)成員函數(shù)名靜態(tài)成員函數(shù)名(實參表實參表)【例【例6.18】 靜態(tài)成員函數(shù)應(yīng)用舉例。靜態(tài)成員函數(shù)應(yīng)用舉例。整理課件6.6 友元友元6.6.1 友元函數(shù)友元函數(shù)友元函數(shù)是類定義中由關(guān)鍵字友元函數(shù)是類定義中由關(guān)鍵字friend修飾的非修飾的非成員函數(shù)。友元函數(shù)可以是一個普通函數(shù),也成員函數(shù)。友元函數(shù)可以是一個普通函數(shù),也可以是其它類的成員函數(shù),它不是本類的成員可以是其它類的成員函數(shù),它不是本類的成員函數(shù),但是在它的函數(shù)體中可以通過函數(shù),但是在它的函數(shù)體中可以通過“對象對象.成成員名員名”訪問類的私有成員和保護成員。訪問類的私有成員和保護成員。友元函數(shù)聲明的格式為:友元函數(shù)聲明的格

35、式為:friend 函數(shù)返回值類型函數(shù)返回值類型 友元函數(shù)名友元函數(shù)名(參數(shù)表參數(shù)表);【例【例6.19】 友元函數(shù)應(yīng)用舉例。友元函數(shù)應(yīng)用舉例。整理課件6.6.2 友元類友元類和函數(shù)一樣,類也可以說明為另一個類的友元,和函數(shù)一樣,類也可以說明為另一個類的友元,這時稱該類為友元類。如果這時稱該類為友元類。如果A類是類是B類的友元類,類的友元類,則則A類中的私有成員函數(shù)都是類中的私有成員函數(shù)都是B類的友元函數(shù),類的友元函數(shù),都可以訪問都可以訪問B類的私有和保護成員。友元類說類的私有和保護成員。友元類說明的格式為:明的格式為:friend class 類名類名;類說明語句可以放在公有部分,也可以放在

36、私類說明語句可以放在公有部分,也可以放在私有部分或保護部分。有部分或保護部分?!纠纠?.20】 友元類應(yīng)用舉例。友元類應(yīng)用舉例。整理課件友元提供了一種非成員函數(shù)訪問類的私有友元提供了一種非成員函數(shù)訪問類的私有成員的方法,這在某些情況下為程序設(shè)計成員的方法,這在某些情況下為程序設(shè)計提供了一定的方便性。但是面向?qū)ο蟮某烫峁┝艘欢ǖ姆奖阈?。但是面向?qū)ο蟮某绦蛟O(shè)計要求類的接口與類的實現(xiàn)分開,對序設(shè)計要求類的接口與類的實現(xiàn)分開,對對象的訪問通過其接口函數(shù)進行。如果直對象的訪問通過其接口函數(shù)進行。如果直接訪問對象的私有成員,就破壞了面向?qū)釉L問對象的私有成員,就破壞了面向?qū)ο蟪绦虻臄?shù)據(jù)隱藏和封裝特性,雖

37、然提供象程序的數(shù)據(jù)隱藏和封裝特性,雖然提供了一些方便,但有可能是得不償失的,所了一些方便,但有可能是得不償失的,所以,需要慎用友元。以,需要慎用友元。整理課件此外,還有兩點需要注意:此外,還有兩點需要注意:(1)友元關(guān)系不能傳遞。例如,)友元關(guān)系不能傳遞。例如,B類是類是A類的類的友元,友元,C類是類是B類的友元,如果類的友元,如果C類和類和A類之間類之間沒有顯式說明,沒有顯式說明,C類和類和A類之間不是友元關(guān)系。類之間不是友元關(guān)系。(2)友元關(guān)系的單向性。例如,如果)友元關(guān)系的單向性。例如,如果B類是類是A類的友元,則類的友元,則B類的成員函數(shù)都是類的成員函數(shù)都是A類的友元函類的友元函數(shù),可

38、以訪問數(shù),可以訪問A類的所有數(shù)據(jù)成員,但類的所有數(shù)據(jù)成員,但A類的類的成員函數(shù)就不是成員函數(shù)就不是B類的友元函數(shù),也就不能訪類的友元函數(shù),也就不能訪問問B類的所有數(shù)據(jù)成員。類的所有數(shù)據(jù)成員。整理課件6.7 常對象和常成員常對象和常成員6.7.1 常對象和常成員函數(shù)常對象和常成員函數(shù)如果在定義對象時用如果在定義對象時用const修飾,則被定義的對修飾,則被定義的對象為常對象。常對象的數(shù)據(jù)成員值在對象的整象為常對象。常對象的數(shù)據(jù)成員值在對象的整個生存期內(nèi)不能被改變,常對象的定義形式如個生存期內(nèi)不能被改變,常對象的定義形式如下:下:類名類名 const 對象名對象名(參數(shù)表參數(shù)表);或:或:const 類名類名

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論