首頁(yè)考試吧論壇Exam8視線考試商城網(wǎng)絡(luò)課程模擬考試考友錄實(shí)用文檔求職招聘論文下載
2013中考
法律碩士
2013高考
MBA考試
2013考研
MPA考試
在職研
中科院
考研培訓(xùn) 自學(xué)考試 成人高考
四 六 級(jí)
GRE考試
攻碩英語(yǔ)
零起點(diǎn)日語(yǔ)
職稱英語(yǔ)
口譯筆譯
申碩英語(yǔ)
零起點(diǎn)韓語(yǔ)
商務(wù)英語(yǔ)
日語(yǔ)等級(jí)
GMAT考試
公共英語(yǔ)
職稱日語(yǔ)
新概念英語(yǔ)
專四專八
博思考試
零起點(diǎn)英語(yǔ)
托?荚
托業(yè)考試
零起點(diǎn)法語(yǔ)
雅思考試
成人英語(yǔ)三級(jí)
零起點(diǎn)德語(yǔ)
等級(jí)考試
華為認(rèn)證
水平考試
Java認(rèn)證
職稱計(jì)算機(jī) 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報(bào) 關(guān) 員
外 銷 員
價(jià)格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報(bào)檢員
法律顧問(wèn)
管理咨詢
企業(yè)培訓(xùn)
社會(huì)工作者
銀行從業(yè)
教師資格
營(yíng)養(yǎng)師
保險(xiǎn)從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國(guó)際商務(wù)
心理咨詢
營(yíng) 銷 師
司法考試
國(guó)際貨運(yùn)代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格
基金從業(yè)資格
統(tǒng)計(jì)從業(yè)資格
經(jīng)濟(jì)師
精算師
統(tǒng)計(jì)師
會(huì)計(jì)職稱
法律顧問(wèn)
ACCA考試
注冊(cè)會(huì)計(jì)師
資產(chǎn)評(píng)估師
審計(jì)師考試
高級(jí)會(huì)計(jì)師
注冊(cè)稅務(wù)師
國(guó)際內(nèi)審師
理財(cái)規(guī)劃師
美國(guó)注冊(cè)會(huì)計(jì)師
一級(jí)建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價(jià)師
二級(jí)建造師
招標(biāo)師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價(jià)工程師
注冊(cè)測(cè)繪師
質(zhì)量工程師
巖土工程師
造價(jià)員考試
注冊(cè)計(jì)量師
環(huán)保工程師
化工工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
監(jiān)理工程師
房地產(chǎn)估價(jià)
土地估價(jià)師
安全評(píng)價(jià)師
房地產(chǎn)經(jīng)紀(jì)人
投資項(xiàng)目管理師
環(huán)境影響評(píng)價(jià)師
土地登記代理人
繽紛校園 實(shí)用文檔 英語(yǔ)學(xué)習(xí) 作文大全 求職招聘 論文下載 訪談|游戲
計(jì)算機(jī)等級(jí)考試

2013年計(jì)算機(jī)等考二級(jí)C++考點(diǎn)歸納:累和對(duì)象

  第6章 類和對(duì)象

  6.1 類的定義

  1類的定義

  類的定義可以分為兩部分:說(shuō)明部分和實(shí)現(xiàn)部分。說(shuō)明部分說(shuō)明類中包含的數(shù)據(jù)成員和成員函數(shù),實(shí)現(xiàn)部分是對(duì)成員函數(shù)的定義。類定義的一般格式如下:

  //類的說(shuō)明部分

  class<類名>

  {

  public:

  <成員函數(shù)或數(shù)據(jù)成員的說(shuō)明> //公有成員,外部接口

  protected:

  <數(shù)據(jù)成員或成員函數(shù)的說(shuō)明> //保護(hù)成員

  private:

  <數(shù)據(jù)成員或成員函數(shù)的說(shuō)明> //私有成員

  };

  //類的實(shí)現(xiàn)部分

  <各個(gè)成員函數(shù)的實(shí)現(xiàn)>

  其中,class是聲明類的關(guān)鍵字;<類名>是要聲明的類的名字,必須符合標(biāo)識(shí)符定義規(guī)則;花括號(hào)表示類的聲明范圍,說(shuō)明該類的成員,其后的分號(hào)表示類聲明結(jié)束。類的成員包括數(shù)據(jù)成員和成員函數(shù),分別描述類所表達(dá)的問(wèn)題的屬性和行為。關(guān)鍵字public、private和protected稱為訪問(wèn)權(quán)限修飾符,它們限制了類成員的訪問(wèn)控制范圍。

  各個(gè)成員函數(shù)的實(shí)現(xiàn)即可以在類體內(nèi)定義,也可以在類體外定義。如果一個(gè)成員函數(shù)在類體內(nèi)進(jìn)行了定義,它將不出現(xiàn)在類的實(shí)現(xiàn)部分;如果所有的成員函數(shù)都在類體內(nèi)進(jìn)行了定義,則可以省略類的實(shí)現(xiàn)部分。在類體內(nèi)定義的成員函數(shù)都是內(nèi)聯(lián)函數(shù)。

  2類成員的訪問(wèn)控制

  類中提供了3種訪問(wèn)控制權(quán)限:公有(public)、私有(private)和保護(hù)(protected)。其中,公有類型定義了類的外部接口,任何一個(gè)外部的訪問(wèn)都必須通過(guò)外部接口進(jìn)行;私有類型的成員只允許本類的成員函數(shù)訪問(wèn),來(lái)自類外部的任何訪問(wèn)都是非法的;保護(hù)類型介于公有類型和私有類型之間,在繼承和派生時(shí)可以體現(xiàn)出其特點(diǎn)。

  3類的數(shù)據(jù)成員

  類中的數(shù)據(jù)成員描述類所表達(dá)的問(wèn)題的屬性。數(shù)據(jù)成員在類體中進(jìn)行定義,其定義方式與一般變量相同,但對(duì)數(shù)據(jù)成員的訪問(wèn)要受到訪問(wèn)權(quán)限修飾符的控制。

  在定義類的數(shù)據(jù)成員時(shí),要注意以下幾個(gè)問(wèn)題。

  (1)類中的數(shù)據(jù)成員可以是任意類型,包括整型、浮點(diǎn)型、字符型、數(shù)組、指針和引用等,也可以是對(duì)象。但是要注意,只有另外一個(gè)類的對(duì)象,才可以作為該類的成員,即作為該類的成員對(duì)象而存在。自身類的對(duì)象是不可以作為自身類的成員存在的,但自身類的指針可以。

  (2)在類體中不允許對(duì)所定義的數(shù)據(jù)成員進(jìn)行初始化。

  4類的成員函數(shù)

  類的成員函數(shù)描述類所表達(dá)的問(wèn)題的行為。類中所有的成員函數(shù)都必須在類體內(nèi)進(jìn)行說(shuō)明。但成員函數(shù)的定義既可以在類體內(nèi)給出,也可以在類體外給出。

  第一種方式是將成員函數(shù)直接定義在類的內(nèi)部。

  第二種方式是在類聲明中給出對(duì)成員函數(shù)的說(shuō)明,而在類外部對(duì)成員函數(shù)進(jìn)行定義(但成員函數(shù)仍然在類范圍內(nèi))。這種在類外部定義的成員函數(shù)的一般格式是:

  <返回類型><類名>::<成員函數(shù)名>(<參數(shù)表>)

  {

  <函數(shù)體>

 。

  在類體外定義成員函數(shù)時(shí),要注意必須在成員函數(shù)名前加上類名和作用域運(yùn)算符(::)。作用域運(yùn)算符用來(lái)標(biāo)識(shí)某個(gè)成員屬于某個(gè)類。作用域運(yùn)算符的使用格式如下:

  <類名>::<成員函數(shù)名>(<參數(shù)表>)

  或

  <類名>::<數(shù)據(jù)成員名>

  成員函數(shù)的兩種定義方式之間是有差別的。如果一個(gè)成員函數(shù)的聲明和定義都在類體內(nèi),那么這個(gè)成員函數(shù)就是內(nèi)聯(lián)函數(shù)。如果一個(gè)成員函數(shù)的聲明在類體內(nèi),而定義在類體外,這時(shí)對(duì)該成員函數(shù)的調(diào)用是按一般函數(shù)進(jìn)行的。如果要將定義在類體外的成員函數(shù)也作為內(nèi)聯(lián)函數(shù)處理,就必須在成員函數(shù)的定義前加上關(guān)鍵字“inline”,以此顯式地說(shuō)明該成員函數(shù)也是一個(gè)內(nèi)聯(lián)函數(shù)。

  成員函數(shù)除了可以定義為內(nèi)聯(lián)函數(shù)以外,也可以進(jìn)行重載,可以對(duì)其參數(shù)設(shè)置默認(rèn)值。

  6.2 對(duì)象的定義

  1對(duì)象的定義

  對(duì)象是類的實(shí)例,一個(gè)對(duì)象必須屬于一個(gè)已知的類。因此在定義對(duì)象之前,必須先定義該對(duì)象所屬的類。

  對(duì)象的定義格式如下:

  <類名><對(duì)象名>(<參數(shù)表>);

  其中,<類名>是待定義的對(duì)象所屬的類的名字。<對(duì)象名>中可以有一個(gè)或多個(gè)對(duì)象名,多個(gè)對(duì)象名之間用逗號(hào)分隔。<對(duì)象名>中,可以是一般的對(duì)象名,也可以是指向?qū)ο蟮闹羔樏蛞妹,還可以是對(duì)象數(shù)組名。<參數(shù)表>是初始化對(duì)象時(shí)需要的,建立對(duì)象時(shí)可以根據(jù)給定的參數(shù)調(diào)用相應(yīng)的構(gòu)造函數(shù)對(duì)對(duì)象進(jìn)行初始化。無(wú)參數(shù)時(shí)表示調(diào)用類的缺省構(gòu)造函數(shù)。

  2對(duì)象的成員

  一個(gè)對(duì)象的成員就是該對(duì)象的類所定義的成員,包括數(shù)據(jù)成員和成員函數(shù)。定義了對(duì)象后,可以使用“ .”運(yùn)算符和“->”運(yùn)算符訪問(wèn)對(duì)象的成員。其中,“ .”運(yùn)算符適用于一般對(duì)象和引用對(duì)象,而“->”運(yùn)算符適用于指針對(duì)象(即指向?qū)ο蟮闹羔?。訪問(wèn)對(duì)象成員的一般格式如下:

  <對(duì)象名> .<數(shù)據(jù)成員名>或<對(duì)象名>-><數(shù)據(jù)成員名>

  <對(duì)象名> .<成員函數(shù)名>(<參數(shù)表>)或<對(duì)象名>-><成員函數(shù)名>(<參數(shù)表>)

  6.3 構(gòu)造函數(shù)和析構(gòu)函數(shù)

  1構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義。構(gòu)造函數(shù)的作用是在對(duì)象被創(chuàng)建時(shí)利用特定的值構(gòu)造對(duì)象,將對(duì)象初始化為一種特定的狀態(tài),使該對(duì)象具有區(qū)別于其他對(duì)象的特征。構(gòu)造函數(shù)在對(duì)象被創(chuàng)建的時(shí)候由系統(tǒng)自動(dòng)調(diào)用。

  構(gòu)造函數(shù)也是類的成員函數(shù),但它是一種特殊的成員函數(shù),它除了具有一般成員函數(shù)的特性之外,還具有一些特殊的性質(zhì):

  (1)構(gòu)造函數(shù)的名字必須與類名相同;

  (2)構(gòu)造函數(shù)不指定返回類型,它隱含有返回值,由系統(tǒng)內(nèi)部使用;

  (3)構(gòu)造函數(shù)可以有一個(gè)或多個(gè)參數(shù),因此構(gòu)造函數(shù)可以重載;

  (4)在創(chuàng)建對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)。

  2缺省構(gòu)造函數(shù)和缺省析構(gòu)函數(shù)

  缺省構(gòu)造函數(shù)就是調(diào)用時(shí)不必提供參數(shù)的構(gòu)造函數(shù)。缺省的構(gòu)造函數(shù)的函數(shù)名與類名相同,它的參數(shù)表或者為空,或者它的所有參數(shù)都具有默認(rèn)值。前面日期類Date的定義中,構(gòu)造函數(shù)Date(int y=2000);就是缺省構(gòu)造函數(shù)。

  如果類中定義了一個(gè)缺省構(gòu)造函數(shù),則使用該函數(shù);如果一個(gè)類中沒有定義任何構(gòu)造函數(shù),編譯器將生成一個(gè)不帶參數(shù)的公有缺省構(gòu)造函數(shù),它的定義格式如下:

  <類名>::<類名>()

  {

 。

  每個(gè)類都必須有一個(gè)析構(gòu)函數(shù)。如果一個(gè)類沒有聲明析構(gòu)函數(shù),編譯器將生成一個(gè)公有的析構(gòu)函數(shù),即缺省析構(gòu)函數(shù),它的定義格式如下:

  <類名>::~<類名>()

  {

 。

  3拷貝構(gòu)造函數(shù)

  類中有一種特殊的構(gòu)造函數(shù)叫做拷貝構(gòu)造函數(shù),它用一個(gè)已知的對(duì)象初始化一個(gè)正在創(chuàng)建的同類對(duì)象?截悩(gòu)造函數(shù)的一般格式如下:

  <類名>::<類名>(const<類名>&<引用對(duì)象名>)

  {

  //拷貝構(gòu)造函數(shù)體

 。

  拷貝構(gòu)造函數(shù)具有以下特點(diǎn):

  (1)也是一種構(gòu)造函數(shù),因此函數(shù)名與類名相同,并且不能指定函數(shù)返順類型。

  (2)只有一個(gè)參數(shù),是對(duì)同類的某個(gè)對(duì)象的引用。

  (3)每一個(gè)類中都必須有一個(gè)拷貝構(gòu)造函數(shù)。如果類中沒有聲明拷貝構(gòu)造函數(shù),編譯器會(huì)自動(dòng)生成一個(gè)具有上述形式的公有的拷貝構(gòu)造函數(shù)。

  6.4 對(duì)象的生存期

  1全局對(duì)象、靜態(tài)對(duì)象與局部對(duì)象

  對(duì)象的生存期是指對(duì)象從被創(chuàng)建開始到被釋放為止的時(shí)間。對(duì)象按生存期可分為3類:

  (1)局部對(duì)象:當(dāng)程序執(zhí)行到局部對(duì)象的定義之處時(shí),調(diào)用構(gòu)造函數(shù)創(chuàng)建該對(duì)象;當(dāng)程序退出定義該對(duì)象所在的函數(shù)體或程序塊時(shí),調(diào)用析構(gòu)函數(shù)釋放該對(duì)象。

  (2)靜態(tài)對(duì)象:當(dāng)程序第一次執(zhí)行到靜態(tài)對(duì)象的定義之處時(shí),調(diào)用構(gòu)造函數(shù)創(chuàng)建該對(duì)象;當(dāng)程序結(jié)束時(shí)調(diào)用析構(gòu)函數(shù)釋放該對(duì)象。

  (3)全局對(duì)象:當(dāng)程序開始執(zhí)行時(shí),調(diào)用構(gòu)造函數(shù)創(chuàng)建該對(duì)象;當(dāng)程序結(jié)束時(shí)調(diào)用析構(gòu)函數(shù)釋放該對(duì)象。

  2自由存儲(chǔ)對(duì)象

  動(dòng)態(tài)內(nèi)存分配技術(shù)可以保證在程序運(yùn)行過(guò)程中按照實(shí)際需要申請(qǐng)適量的內(nèi)存,使用結(jié)束后進(jìn)行釋放。這種在程序運(yùn)行過(guò)程中根據(jù)需要可以隨時(shí)建立或刪除的對(duì)象稱為自由存儲(chǔ)對(duì)象。建立和刪除工作分別由堆運(yùn)算符new和delete完成。

  6.5 this 指針

  C+ +提供了一個(gè)特殊的對(duì)象指針——this指針,它是成員函數(shù)所屬對(duì)象的指針,它指向類對(duì)象的地址。成員函數(shù)通過(guò)這個(gè)指針可以知道自己屬于哪一個(gè)對(duì)象。

  this指針是一個(gè)隱含的指針,它隱含于每個(gè)類的非靜態(tài)成員函數(shù)中,它明確地表示出了成員函數(shù)當(dāng)前操作的數(shù)據(jù)所屬的對(duì)象。當(dāng)對(duì)一個(gè)對(duì)象調(diào)用成員函數(shù)時(shí),編譯程序先將對(duì)象的地址賦值給this指針,然后調(diào)用成員函數(shù),每次成員函數(shù)存取數(shù)據(jù)成員時(shí),則隱含使用this指針。

  6.6 靜態(tài)成員

  對(duì)于類中的非靜態(tài)數(shù)據(jù)成員,每一個(gè)類對(duì)象都擁有一個(gè)拷貝(副本),即每個(gè)對(duì)象的同名數(shù)據(jù)成員可以分別存儲(chǔ)不同的數(shù)值,這是保證每個(gè)對(duì)象擁有區(qū)別于其他對(duì)象的特征的需要。而類中的靜態(tài)成員則是解決同一個(gè)類的不同對(duì)象之間的數(shù)據(jù)和函數(shù)共享問(wèn)題的。靜態(tài)成員的特性是不管這個(gè)類創(chuàng)建了多少個(gè)對(duì)象,它的靜態(tài)成員都只有一個(gè)拷貝(副本),這個(gè)副本被所有屬于這個(gè)類的對(duì)象共享。這種共享與全局變量或全局函數(shù)相比,既沒有破壞數(shù)據(jù)隱藏的原則,又保證了安全性。

  靜態(tài)成員表示整個(gè)類范圍的信息,其聲明以static關(guān)鍵字開始,包括靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。

  1靜態(tài)數(shù)據(jù)成員

  靜態(tài)數(shù)據(jù)成員聲明時(shí)要使用關(guān)鍵字static。

  靜態(tài)數(shù)據(jù)成員在每個(gè)類對(duì)象中并不占有存儲(chǔ)空間,它只是在每個(gè)類中分配有存儲(chǔ)空間,供所有對(duì)象公用。靜態(tài)數(shù)據(jù)成員的值對(duì)每個(gè)對(duì)象都是一樣的,但它的值可以被任何一個(gè)對(duì)象更新,從而實(shí)現(xiàn)了同一類的不同對(duì)象之間的數(shù)據(jù)共享。

  靜態(tài)數(shù)據(jù)成員具有靜態(tài)生存期,必須對(duì)它進(jìn)行初始化。靜態(tài)數(shù)據(jù)成員初始化的一般格式如下:

  <數(shù)據(jù)類型><類名>::<靜態(tài)數(shù)據(jù)成員名>=<初始值>;

  在對(duì)靜態(tài)數(shù)據(jù)成員初始化時(shí)應(yīng)注意:

  (1)由于在類的聲明中僅僅是對(duì)靜態(tài)數(shù)據(jù)成員進(jìn)行了引用性聲明,因此必須在文件作用域的某個(gè)地方對(duì)靜態(tài)數(shù)據(jù)成員進(jìn)行定義并初始化,即應(yīng)在類體外對(duì)靜態(tài)數(shù)據(jù)成員進(jìn)行初始化(靜態(tài)數(shù)據(jù)成員的初始化與它的訪問(wèn)控制權(quán)限無(wú)關(guān))。

  (2)靜態(tài)數(shù)據(jù)成員初始化時(shí)前面不加static關(guān)鍵字,以免與一般靜態(tài)變量或?qū)ο蠡煜?/P>

  (3)由于靜態(tài)數(shù)據(jù)成員是類的成員,因此在初始化時(shí)必須使用作用域運(yùn)算符(::)限定它所屬的類。

  2靜態(tài)成員函數(shù)

  公有的靜態(tài)數(shù)據(jù)成員可以直接訪問(wèn),但私有的或保護(hù)的靜態(tài)數(shù)據(jù)成員卻必須通過(guò)公有的接口進(jìn)行訪問(wèn),一般將這個(gè)公有的接口定義為靜態(tài)成員函數(shù)。

  使用static關(guān)鍵字聲明的成員函數(shù)就是靜態(tài)成員函數(shù),靜態(tài)成員函數(shù)也屬于整個(gè)類而不屬于類中的某個(gè)對(duì)象,它是該類的所有對(duì)象共享的成員函數(shù)。

  靜態(tài)成員函數(shù)可以在類體內(nèi)定義,也可以在類外定義。當(dāng)在類外定義時(shí),要注意不能使用static關(guān)鍵字作為前綴。

  由于靜態(tài)成員函數(shù)在類中只有一個(gè)拷貝(副本),因此它訪問(wèn)對(duì)象的成員時(shí)要受到一些限制:靜態(tài)成員函數(shù)可以直接訪問(wèn)類中說(shuō)明的靜態(tài)成員,但不能直接訪問(wèn)類中說(shuō)明的非靜態(tài)成員;若要訪問(wèn)非靜態(tài)成員時(shí),必須通過(guò)參數(shù)傳遞的方式得到相應(yīng)的對(duì)象,再通過(guò)對(duì)象來(lái)訪問(wèn)。

  6.7 常成員

  雖然數(shù)據(jù)隱藏保證了數(shù)據(jù)的安全性,但各種形式的數(shù)據(jù)共享卻又不同程度地破壞了數(shù)據(jù)的安全性。因此,對(duì)于既需要共享又需要防止改變的數(shù)據(jù)應(yīng)該定義為常量進(jìn)行保護(hù),以保證它在整個(gè)程序運(yùn)行期間是不可改變的。這些常量需要使用const修飾符進(jìn)行定義。const關(guān)鍵字不僅可以修飾類對(duì)象本身,也可以修飾類對(duì)象的成員函數(shù)和數(shù)據(jù)成員,分別稱為常對(duì)象、常成員函數(shù)和常數(shù)據(jù)成員。

  1常對(duì)象

  使用const關(guān)鍵字修飾的對(duì)象稱為常對(duì)象,它的定義格式如下:

  <類名>const<對(duì)象名>

  或

  const<類名><對(duì)象名>

  常對(duì)象在定義時(shí)必須進(jìn)行初始化,而且不能被更新。

  2常成員函數(shù)

  使用const關(guān)鍵字說(shuō)明的成員函數(shù)稱為常成員函數(shù),常成員函數(shù)的說(shuō)明格式如下:

  <返回類型><成員函數(shù)名>(<參數(shù)表>)const;

  3常數(shù)據(jù)成員

  使用const說(shuō)明的數(shù)據(jù)成員稱為常數(shù)據(jù)成員。常數(shù)據(jù)成員的定義與一般常量的定義方式相同,只是它的定義必須出現(xiàn)在類體中。

  常數(shù)據(jù)成員同樣也必須進(jìn)行初始化,并且不能被更新。但常數(shù)據(jù)成員的初始化只能通過(guò)構(gòu)造函數(shù)的成員初始化列表進(jìn)行。

  常數(shù)據(jù)成員的初始化只能在成員初始化列表中進(jìn)行,但對(duì)于大多數(shù)數(shù)據(jù)成員而言,既可以使用成員初始化列表的方式,也可以使用賦值,即在構(gòu)造函數(shù)體中使用賦值語(yǔ)句將表達(dá)式的值賦值給數(shù)據(jù)成員。這兩種方式中,成員初始化列表方式使初始化情況更加明顯,并且可能帶來(lái)效率上的優(yōu)勢(shì)。

  6.8 友元

  類具有數(shù)據(jù)封裝和隱藏的特性,只有類的成員函數(shù)才能訪問(wèn)類的私有成員,外部函數(shù)只能訪問(wèn)類的公有成員。但在某些情況下,需要在類的外部訪問(wèn)類的私有成員。這時(shí),如果通過(guò)公有成員函數(shù)進(jìn)行訪問(wèn),由于參數(shù)傳遞、類型檢查和安全性檢查等需要時(shí)間上的開銷,將影響程序的運(yùn)行效率。為了解決整個(gè)問(wèn)題,引入了友元。友元可以在類外部直接訪問(wèn)類的私有成員,提高了程序的運(yùn)行效率。

  友元提供了不同類或?qū)ο蟮某蓡T函數(shù)之間、類的成員函數(shù)與一般函數(shù)之間進(jìn)行數(shù)據(jù)共享的機(jī)制。對(duì)于一個(gè)類,可以利用friend關(guān)鍵字將一般函數(shù)、其他類的成員函數(shù)或者是其他類聲明為該類的友元,使得這個(gè)類中本來(lái)隱藏的信息(包括私有成員和保護(hù)成員)可以被友元所訪問(wèn)。如果友元是一般成員函數(shù)或是類的成員函數(shù),稱為友元函數(shù);如果友元是一個(gè)類,則稱為友元類,友元類的所有成員函數(shù)都成為友元函數(shù)。

  1友元函數(shù)

  友元函數(shù)不是當(dāng)前類的成員函數(shù),而是獨(dú)立于當(dāng)前類的外部函數(shù)(包括普通函數(shù)和其他類的成員函數(shù)),但它可以訪問(wèn)該類的所有對(duì)象的成員,包括私有成員、保護(hù)成員和公有成員。

  友元函數(shù)要在類定義時(shí)聲明,聲明時(shí)要在其函數(shù)名前加上關(guān)鍵字friend。該聲明可以放在公有部分,也可以放在私有部分。友元函數(shù)的定主既可以在類內(nèi)部進(jìn)行,也可以在類外部進(jìn)行。

  2友元類

  友元除了可以是函數(shù)外,還可以是類,即一個(gè)類可以作為另一個(gè)類的友元,稱為友元類。友元類的所有成員函數(shù)都是另一個(gè)類的友元函數(shù),都可以訪問(wèn)另一個(gè)類中的隱藏信息(包括私有成員和保護(hù)成員)。

  友元類可以在另一個(gè)類的公有部分或私有部分進(jìn)行說(shuō)明,說(shuō)明方法如下:

  friend<類名>;//友元類類名

  6.9 對(duì)象數(shù)組

  對(duì)象數(shù)組是指數(shù)組元素為對(duì)象的數(shù)組,該數(shù)組中的每一個(gè)元素都是同一個(gè)類的對(duì)象。

  對(duì)象數(shù)組的定義格式如下:

  <類名><數(shù)組名>[<大小>]……

  使用對(duì)象數(shù)組成員的一般格式是:

  <數(shù)組名>[<下標(biāo)>].<成員名>

  6.10 成員對(duì)象

  類的數(shù)據(jù)成員可以是簡(jiǎn)單類型或自定義類型,也可以是類類型的對(duì)象。因此,可以利用已定義的類來(lái)構(gòu)成新的類,使得一些復(fù)雜的類可以由一些簡(jiǎn)單類組合而成。類的聚集,描述的就是一個(gè)類內(nèi)嵌其他類的對(duì)象作為成員的情況。

  當(dāng)一個(gè)類的成員是另外一個(gè)類的對(duì)象時(shí),該對(duì)象就稱為成員對(duì)象。當(dāng)類中出現(xiàn)了成員對(duì)象時(shí),該類的構(gòu)造函數(shù)要包含對(duì)成員對(duì)象的初始化,通常采用成員初始化列表的方法來(lái)初始化成員對(duì)象。定義的一般格式如下:

  <類名>::<類名>(<總形參表>):<成員對(duì)象1>(<形參表1>),<成員對(duì)象2>(<形參表2<),…

  {

  //類成員的初始化

 。

  建立一個(gè)類的對(duì)象時(shí),要調(diào)用它的構(gòu)造函數(shù)。如果這個(gè)類有成員對(duì)象,要首先執(zhí)行所有的成員對(duì)象的構(gòu)造函數(shù),當(dāng)全部成員對(duì)象的初始化都完成之后,再執(zhí)行當(dāng)前類的構(gòu)造函數(shù)體。析構(gòu)函數(shù)的執(zhí)行順序與構(gòu)造函數(shù)的執(zhí)行順序相反。

  當(dāng)類中有多個(gè)成員對(duì)象時(shí),要按照定義成員對(duì)象的順序建立各個(gè)子對(duì)象,即成員對(duì)象構(gòu)造函數(shù)的執(zhí)行順序僅與成員對(duì)象在類中聲明的順序有關(guān),而與成員初始化列表中給出的成員對(duì)象的順序無(wú)關(guān)。

  如果在構(gòu)造函數(shù)的成員初始化列表中沒有給出對(duì)成員對(duì)象的初始化,則表示使用成員對(duì)象的缺省構(gòu)造函數(shù)。如果成員對(duì)象所在的類沒有缺省構(gòu)造函數(shù),將產(chǎn)生錯(cuò)誤。如果所有的成員對(duì)象都是調(diào)用缺省構(gòu)造函數(shù)建立的,那么該類的構(gòu)造函數(shù)的成員初始化列表可以省略。

文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。