C++ 知識點(diǎn)(三)

  1. 靜態(tài)成員
    可以定義類的靜態(tài)成員,而不是定義一個可普遍訪問的全局對象,就能夠?qū)崿F(xiàn)同類的多個對象之間的數(shù)據(jù)共享。靜態(tài)數(shù)據(jù)成員在內(nèi)存中只占一份空間,而不是每個對象都分別為它分配一份空間,靜態(tài)數(shù)據(jù)成員的值在所有對象中都是一樣的。
    在未建立類對象時(shí)也已經(jīng)為靜態(tài)數(shù)據(jù)成員分配空間,因此可以在未建立類對象時(shí)訪問靜態(tài)成員。
    靜態(tài)數(shù)據(jù)成員不通過類構(gòu)造函數(shù)進(jìn)行初始化,而是在定義時(shí)進(jìn)行初始化。靜態(tài)數(shù)據(jù)成員必須在類外部定義一次,僅有一次。
    靜態(tài)成員函數(shù)和靜態(tài)數(shù)據(jù)成員一樣,是類的一部分,而不是對象的一部分。
    靜態(tài)成員函數(shù)和非靜態(tài)成員函數(shù)的區(qū)別:
    非靜態(tài)成員函數(shù)有this指針,而靜態(tài)成員函數(shù)沒有this指針,因此靜態(tài)成員函數(shù)不能訪問本類中的非靜態(tài)成員,作用是為了訪問靜態(tài)數(shù)據(jù)成員。
  2. 友元
    C++提供了友元機(jī)制,允許一個類將其非公有成員的訪問權(quán)限授予指定的函數(shù)或類。友元的生命以關(guān)鍵字friend開始,它只能出現(xiàn)在類定義的內(nèi)部。
    因此,現(xiàn)在訪問類的非公有成員可以有兩個用戶:類成員和友元。
    面向?qū)ο蟪绦蛟O(shè)計(jì)的一個基本原則就是封裝性和信息隱蔽,而友元卻可以訪問其他類的私有成員,突破了封裝原則。友元的使用有助于數(shù)據(jù)共享,能提高程序的效率,但是也不要濫用。
  3. 泛型編程
    面向過程(PO)是通過將代碼段封裝在一個函數(shù)中,通過函數(shù)調(diào)用來實(shí)現(xiàn)目標(biāo)代碼的重用。
    面向?qū)ο笫峭ㄟ^類的繼承來實(shí)現(xiàn)對象目標(biāo)代碼的重用。
    泛型是一種允許一個數(shù)據(jù)取不同類型的技術(shù),泛型算法是與操作對象的數(shù)據(jù)類型獨(dú)立的算法。泛型算法建立在各種抽象化基礎(chǔ)之上。利用參數(shù)化模板來達(dá)到數(shù)據(jù)類型的抽象化,利用容器和迭代器來達(dá)到數(shù)據(jù)結(jié)構(gòu)的抽象化,利用分配器和適配器來達(dá)到存儲分配和界面接口的抽象化。
  4. 數(shù)據(jù)封裝
    C++通過類實(shí)現(xiàn)數(shù)據(jù)封裝,即通過指定各成員的訪問權(quán)限來實(shí)現(xiàn)。
  5. 繼承和派生
    在C++中,繼承就是在一個已存在的類的基礎(chǔ)上建立一個新的類。在一個派生類中,其成員由兩部分構(gòu)成:一部分是從基類繼承得到的,另一部分是自己定義的新成員。
    友元關(guān)系不能繼承。一方面,基類的友元對派生類的成員沒有特殊的訪問權(quán)限,另一方面,如果基類被授予友元關(guān)系,則只有基類具有特殊的訪問權(quán)限,該基類的派生類不能訪問授予友元關(guān)系的類。
    只有基類類成員和友元可以訪問基類的private部分,派生類不能訪問基類的私有成員。但是若聲明為protected,仍然不能被類用戶訪問,但是可被派生類訪問。
  6. 派生類的構(gòu)造和析構(gòu)函數(shù)
    在定義派生類時(shí),派生類并沒有把基類的構(gòu)造函數(shù)和析構(gòu)函數(shù)繼承下來。因此,對繼承的基類成員的初始化工作要由派生類的構(gòu)造函數(shù)來承擔(dān),同時(shí)基類的析構(gòu)函數(shù)也需要由派生類的析構(gòu)函數(shù)來調(diào)用。
    如果一個派生類有多個直接基類,而這些直接基類又有一個共同的基類,則在最終的派生類中會保留該間接共同基類數(shù)據(jù)成員的多份同名成員。所以C++提供了虛基類機(jī)制,使得在繼承間接共同基類時(shí)只保留一份成員。
  7. 多態(tài)性和虛函數(shù)
    多態(tài)是指同樣的消息被不同類型的對象接收時(shí)導(dǎo)致不同的行為。所謂消息是指對類成員函數(shù)的調(diào)用,不同的行為是指不同的實(shí)現(xiàn),也就是調(diào)用了不同的函數(shù)。
    多態(tài)的分類:
  • 重載多態(tài)
    重載分為函數(shù)重載和運(yùn)算符重載。重定義已有的函數(shù)稱為函數(shù)重載。重定義已有運(yùn)算符的語義為運(yùn)算符重載。
  • 強(qiáng)制多態(tài)
    強(qiáng)制類型轉(zhuǎn)換
  • 參數(shù)化多態(tài)
    將類型作為函數(shù)或類的參數(shù),避免為各種不同的數(shù)據(jù)類型編寫不同的函數(shù)或類,提高了程序設(shè)計(jì)的靈活性。
    模板是C++實(shí)現(xiàn)參數(shù)化多態(tài)性的工具,分為函數(shù)模板和類模板。
  • 包含多態(tài)
    C++中采用虛函數(shù)實(shí)現(xiàn)包含多態(tài)。至少含有一個虛函數(shù)的類稱為多態(tài)類。
  1. 賦值兼容性規(guī)則
    賦值兼容性規(guī)則是指在需要基類對象的任何地方,都可以使用公有派生類對象來替代。即子類可以賦值給基類。
    賦值兼容規(guī)則是C++多態(tài)性的重要基礎(chǔ)之一。
  2. 聯(lián)編binding
    聯(lián)編又稱綁定,就是將模塊或函數(shù)合并在一起生成可執(zhí)行代碼的處理過程,同時(shí)對每個模塊或者函數(shù)分配內(nèi)存地址,并且對外部訪問也分配正確的內(nèi)存地址。
    靜態(tài)聯(lián)編:在編譯階段就將函數(shù)實(shí)現(xiàn)和函數(shù)調(diào)用綁定起來
    動態(tài)聯(lián)編:在程序運(yùn)行的時(shí)候才進(jìn)行函數(shù)實(shí)現(xiàn)和函數(shù)調(diào)用的綁定,運(yùn)用虛函數(shù)
  3. 虛函數(shù)
    如果派生類沒有改寫基類的虛函數(shù),則函數(shù)指針調(diào)用基類的虛函數(shù)。如果派生類改寫了基類的心虛函數(shù),編譯器將重新為派生類的虛函數(shù)建立地址,函數(shù)指針會調(diào)用改寫以后的虛函數(shù)。
    利用虛函數(shù),可以在基類和派生類中使用相同的函數(shù)名定義函數(shù)的不同實(shí)現(xiàn)。當(dāng)用基類指針或引用對虛函數(shù)進(jìn)行訪問時(shí),系統(tǒng)將根據(jù)運(yùn)行時(shí)指針或引用所指向的實(shí)際對象來自動確定調(diào)用對象所在類的虛函數(shù)版本。
  4. 虛析構(gòu)函數(shù)
    當(dāng)基類的析構(gòu)函數(shù)聲明為虛函數(shù)時(shí),無論指針指的是同一類族中的哪一個類對象,系統(tǒng)總會采用動態(tài)聯(lián)編,調(diào)用正確的析構(gòu)函數(shù),對該對象進(jìn)行清理。
    C++支持虛析構(gòu)函數(shù),但不支持虛構(gòu)造函數(shù),即構(gòu)造函數(shù)不能聲明為虛函數(shù)。這是因?yàn)樵趫?zhí)行構(gòu)造函數(shù)時(shí),類對象還未完成建立過程,當(dāng)然談不上虛函數(shù)與類對象的綁定。
  5. 抽象類
    純虛函數(shù)=0沒有函數(shù)體,便于派生類根據(jù)需要對它進(jìn)行定義。
    包含純虛函數(shù)的類稱為抽象類。一個抽象類只能作為基類來派生新類,而不能定義對象。抽象類的主要作用是聲明一族派生類的共同接口,而接口的完整實(shí)現(xiàn),即純虛函數(shù)的函數(shù)體需要由派生類自己定義,使它們能夠更有效的發(fā)揮多態(tài)特性。
  6. 運(yùn)算符重載
    C++不允許創(chuàng)造新的運(yùn)算符,不過它允許重載大部分現(xiàn)有運(yùn)算符,賦予其另一種功能,以適應(yīng)不同的類型。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容