C 之繼承篇

2021-07-27 12:54:55 字數 3300 閱讀 1542

1.繼承許可權

繼承許可權與訪問許可權

public(公有訪問)

protected(保護訪問)

private(私有訪問)

public(公有繼承)

繼承後變成public(公有訪問)

繼承後變成protected(保護訪問)

繼承後不可訪問

protected(保護繼承)

繼承後變成protected(保護訪問)

繼承後變成protected(保護訪問)

繼承後不可訪問

private(私有繼承)

繼承後變成private(私有訪問)

繼承後變成private(私有訪問)

繼承後不可訪問

注:protected和private的區別:

protected:在派生類中可以訪問,類外不可訪問

private:派生類和類外均不可訪問

2.繼承定義格式

3.同名隱藏

定義:基類,派生類某乙個成員變數同名,或者某乙個成員函式同名(只要函式名一樣,不管引數列表,返回值是否一樣),通過派生類呼叫該成員變數或成員函式時,只會呼叫派生類的,基類的看不到,這種現象稱為同名隱藏。

#include #include using namespace std;

class base

;class derived:public base

;int main()

總結:基類的物件模型是按照宣告次序的。派生類是先是基類的,然後是自己的(按照宣告順序排列)。

5.派生類物件

小結:
(1)子類物件可以賦值給父類物件。原理就像是切片/切割一樣。
(2)父類物件不能賦值給子類物件。
(3)父類的指標/引用可以指向子類物件。
(4)子類的指標/引用不能指向父類物件。
7.友元函式&static&繼承
友元函式屬於類外函式,所以不能繼承。
static修飾的成員可以繼承,但是,無論多少派生類,只有乙份static修飾的成員。
8.多繼承
如: 有class a,class b, 

class c:public a,public b

c類的父類有兩個,便成c類為多繼承。

注:繼承多個類時,每個類的繼承許可權不能省略,否則,class預設的繼承許可權是private。
9.菱形繼承

注:d類物件訪問_b時,需要加上作用域,不然會產生二義性。因為c1,c2類各有乙個_b,d類物件訪問時,不知要訪問哪個。

10.虛繼承---解決菱形繼承的二義性和資料冗餘的問題

繼承許可權前面加上virtual

關鍵字。

例如:

class a

小結:(1)虛繼承中,在程式編譯時,偏移量的**已經生成。在呼叫建構函式時,只是將位址存入。

(2)虛繼承中,a類若是無建構函式,b類自動合成建構函式。(將指向偏移量的位址存入物件的前四個位元組)。

(3)虛繼承與普通繼承的區別在於,呼叫建構函式前,先push 1,以此來判斷是否為虛繼承,若是,便執行(2)中所說。

(4)虛繼承中,基類的成員變數只存在乙份,所以當派生類物件呼叫基類物件時,不會存在二義性問題,因此,虛繼承可以解決菱形繼承中的二義性問題和資料冗餘的問題。

用虛繼承解決菱形繼承中二義性問題:

上述的這種情況,並沒有解決菱形二義性的問題。

C 之繼承篇

c 繼承篇 1 基本概念 繼承 inheritance 機制是物件導向程式設計使 可以復用的最重要的手段,它允許程式設計師在保持 原有類特性的基礎上進行擴充套件,增加功能。這樣產生新的類,稱派生類。繼承呈現了物件導向程式設 計的層次結構,體現了由簡單到複雜的認知過程。2 繼承格式及特性 class ...

C 學習之繼承篇

今天通過對實驗二繼承,過載,覆蓋的學習,讓我更深一步理解了這些概念的區別。首先來明確乙個概念,函式名即位址,也就是說函式名就是個指標。編譯階段,編譯器為每個函式的 分配乙個位址空間並編譯函式 到這個空間中,函式名就指向這個位址空間。也即每個函式名都有自己唯一的 空間。同理,類的成員函式也是如此。但是...

c 學習之繼承篇(多重繼承之虛繼承)

虛繼承 是物件導向程式設計中的一種技術,是指乙個指定的基類,在繼承體系結構中,將其成員資料例項共享給也從這個基型別直接或間接派生的其它類。形式 在繼承定義中包含了virtual關鍵字的繼承關係,如下圖中,類a就叫做虛基類。虛擬繼承是多重繼承中的菱形繼承所特有的概念。虛擬基類是為解決多重繼承而出現的。...