細說c 三大特性,不可不知

2021-10-08 00:07:14 字數 2428 閱讀 4086

2.繼承

3.多型

不管是入門還是高階,作為c++開發者,都需要了解c++的語言特性,這也是我的複習筆記。

首先,c++的特性包含三大部分:封裝繼承多型。封裝可以使得**模組化(是基礎),繼承可以擴充套件已存在的**(是關鍵),而多型的目的則是為了介面重用(是補充

封裝:突破了c語言對於函式的限制,封裝可以隱藏實現細節,從而使得**能夠模組化。

這有點像在設計電路元器件的時候,把與或門組合成乙個加法器然後把這乙個整體封裝起來當作乙個整體,以後再用到加法器的時候就不用乙個乙個去組合與或門而是直接使用封裝好的那乙個整體。

在c++中,封裝是把過程和資料報圍起來,對資料的訪問只能通過已定義的介面。也就是說把成員變數和成員函式封裝起來,對成員變數的訪問只能通過成員函式。(類中不再留有public的成員變數,外界對private的成員變數的訪問和操作完全通過成員函式)

類是一種複雜的資料型別它是將不同型別的資料和與這些資料相關的操作封裝在一起的集合體。因此,類具有對資料的抽象性,隱藏性和封裝性。

在物件導向程式設計上可理解為:把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。

資料抽象是指,只向外界提供關鍵資訊,並隱藏其後台的實現細節,即只表現必要的資訊而不呈現細節。僅對使用者呈現介面而使具體實現透明化。

是一種依賴於介面和實現分離的程式設計(設計)技術

這樣做有什麼好處呢?

談到了資料的抽象,那也就引出了資料的封裝。資料抽象是一種僅向使用者呈現介面而把具體的實現細節隱藏起來的機制,資料封裝是一種把資料和運算元據的函式**在一起的機制。

在c++中,我們通過建立類來進行封裝和隱藏,通過私有成員(private)來把資料進行隱藏,並通過類的私有成員函式來訪問或編輯,通過公有函式(public)來實現外界對於類的訪問,相當於介面。

舉個例子,動物是乙個抽象類,從他這裡派生出老虎子類,獅子子類。老虎和獅子可以進行例項化(看得見摸得著)成為一頭老虎a和一頭獅子b,而動物進行例項化好像就有點不那麼真實(是乙個抽象的概念,不是實體),所以抽象類不能例項化。

純虛函式是通過在宣告中使用 「= 0」 來指定的virtual 虛函式

繼承:繼承可以通過擴充套件已存在的**模組(類),達到**重用的目的。原有的類稱為基類或父類,產生的新類稱為派生類或子類。

如何宣告派生類呢?

class 派生類名:繼承方式 基類名1

, 繼承方式 基類名2,.

..,繼承方式 基類名n

;

其中繼承方式指的是public、protected和private,預設為private。

在單繼承下,派生類可以直接訪問public和protected成員。

而在多繼承下,派生類可以從兩個或者更多個基類中繼承同名的成員,然而在這種情況下,直接訪問是二義的(不知道訪問的具體是哪乙個成員),將導致編譯時刻錯誤。通過指定成員名,來限定域,消除二義性

舉個栗子

#include

using

namespace std;

classa;

classb;

classc:

public a,

public b

;int

main()

由於二義性的原因,乙個類不可以從同乙個類中直接繼承一次以上。也就是說假如類a是基類,b繼承自a,c繼承自b,那麼c的例項呼叫成員時不能限定為a的域,而只能限定到b。

多型:允許將子類型別的指標賦值給父類型別的指標(根據不同的物件或訊息,選擇不同的函式指標來呼叫),也可以理解為介面,「乙個介面,多種方法」。

順便小結一下前兩節,順便引出多型的作用:

c++支援兩種多型性:編譯時多型性,執行時多型性。

在使用動態多型時(也就是呼叫重寫的派生類成員函式時),通過基類中的指標,指向虛函式,由於每個虛函式都有乙個虛函式列表,此時呼叫的與虛函式同名的重寫函式並不是直接呼叫虛函式,而是通過虛函式列表找到相應的函式的位址,因此根據指向的物件不同,函式位址也將不同。

不使用虛函式的重寫是靜態多型(靜態鏈結),函式的呼叫在程式執行前就已經準備好了。在呼叫時會使用基類的指標導致呼叫了基類函式。

不可不知的C 隱藏規則

在物件導向的開發過程中,經常出現類的繼承,這裡面出現的成員函式的過載 overload 覆蓋 override 與隱藏 hidden 很容易混淆。首先澄清這3個概念 過載 相同的範圍 在同乙個類中 函式名字相同 引數不同 virtual 關鍵字可有可無 覆蓋 派生類函式覆蓋基類函式 不同的範圍 分別...

不可不知的健康知識

健康最重要 晚上9 11點為免疫系統 淋巴 排毒時間,此段時間應安靜或聽 晚間11 凌晨1點,肝的排毒,需在熟睡中進行。凌晨1 3點,膽的排毒,亦同。凌晨3 5點,肺的排毒。此即為何咳嗽的人在這段時間咳得最劇烈,因排毒動作已走到肺 不應用止咳藥,以免抑制廢積物的排除。凌晨5 7點,大腸的排毒,應上廁...

不可不知的sudo命令

在linux運維工作中,每個人都應該各司其職。比如說運維經理掌握了root使用者,普通的運維人員一般人手乙個普通登入使用者。root使用者不簡單啊,建立使用者,日常重啟伺服器工作,以及一些其他的日常工作都是root使用者來完成的!很厲害吧!雖然運維經理是乙個super man,但是人家畢竟是經理嘛!...