C 隨筆 類繼承 派生類與基類

2021-09-21 18:30:48 字數 967 閱讀 5272

@1 派生類會繼承基類的資料成員和部分方法成員,並將其加入派生類的相應區域(public、private、protected,取決於才去的繼承方式)。之所以是部分方法成員,是因為有一些特殊的函式不會被繼承:建構函式、析構函式、賦值運算子函式等。public、private、protected區域的劃分只是對可見性的一種描述,並不是真正實現上按這種方式進行劃分。基類就像是派生類物件內嵌的乙個物件。通過這種內嵌的方式來實現繼承。(自己的理解)

@2 派生類物件被建立時,必須先建立基類物件。正如前述,基類物件可以理解為是派生類物件的乙個內嵌物件,以此實現繼承。因此,在派生類內需要對繼承而來的基類的成員進行訪問時,必然需要先對內嵌的基類物件進行建立。建立基類物件的方式可以採用成員初始化列表語法進行顯式呼叫基類的建構函式,否則將會自動呼叫基類的預設建構函式進行基類物件的建立。

建構函式、析構函式、賦值運輸符函式。這三類方法(函式)是不會從基類中被繼承到派生類中的。所以如果有必要,例如在派生類物件採用new分配動態記憶體時,需要在派生類中新增屬於派生類的構造、析構、賦值運算子函式等等(為了解決deep copy問題)。

@1 從基類繼承過來的未被重新定義的方法(函式)

@2 在派生類中對基類方法(函式)重新定義後的方法(函式)

@3 在派生類中新新增的派生類方法(函式)

首先判斷是否在派生類中有對該基類方法進行重新定義,如果有,說明該類方法的基類版本已經被在派生類中重新定義的版本所覆蓋了,也就是被隱藏了。因此將呼叫該基類方法在派生類中重新定義的版本;如果沒有重新定義,則會使用從基類繼承得到的屬於派生類的基類版本的類方法。

如果在派生類中沒有定義這三種特殊方法(函式)

如果在派生類中定義了這三種特殊函式,則在通過派生類物件對其進行呼叫時,將呼叫派生類中定義的函式。

如果在派生類沒有使用new進行動態記憶體分配時,無需在派生類中定義以上三種特殊的函式。但是如果在派生類中使用了new進行動態記憶體的分配,則必須在派生類中顯式定義以上三種特殊的函式。同樣是為了解決deep copy的問題。

繼承 基類和派生類

說明派生類的生成和使用 include using namespace std class test1 基類 test1 int a x a void disp class test2 public test1 派生類 test2 int a,int b test1 a void disp intm...

基類與派生類

初學c 的時候,很多人都很頭疼各種訪問標號下基類與派生類的關係,其實,死記硬背肯定不是乙個好的辦法,要知道它們之間的關係,先要分析一下訪問標號是如何產生的 在沒有繼承之前,類的只有兩類使用者 類本身和類的使用者。把類成員通過public和private劃分恰好體現了這一分割 類的使用者只能訪問類的p...

C 繼承 子類(派生類) 父類(基類)

子類 派生類 父類 基類 1.子類擁有父類所有的成員.2.protected 修飾的成員只能在本類和子類中訪問.3.建立子類物件的時候,在子類物件中會為子類物件的字段開闢空間 也會為父類物件的所有字段開闢空間.只不過父類私有的成員訪問不到而已。4.子類從父類繼承父類所有的非私有成員.5.base關鍵...