C 物件導向程式設計筆記(二)

2021-06-07 18:00:58 字數 1094 閱讀 4123

c++物件導向程式設計(二)

一、過載與覆蓋

成員函式被過載的特徵:

(1 )相同的範圍(在同乙個類中);

(2 )函式名字相同;

(3 )引數不同;

(4 )virtual 關鍵字可有可無。

覆蓋是指派生類函式覆蓋基類函式,特徵是:

(1 )不同的範圍(分別位於派生類與基類);

(2 )函式名字相同;

(3 )引數相同;

(4 )基類函式必須有virtual 關鍵字。

二、隱藏規則

(1 )如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。

(2 )如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual

關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)。

三、繼承情況下的類的作用域

1、如上所述,與基類成員同名的派生類成員將遮蔽對基類成員的直接訪問。但可以作用域操作符訪問被遮蔽的基類成員,如,return base::men;

2、如上所述,區域性作用域中宣告的函式不會過載全域性作用域中定義的函式,同樣,派生類所定義的函式也不過載基類中定義的成員,只有在派生類根本沒有定義該函式時,才考慮基類函式。

3、繼承層次確定函式呼叫遵循的四個驟

(1)首先確定進行函式呼叫的物件、引用或指標的靜態型別;

(2)在該類中查詢函式,如果找不到,就在直接基類中查詢,如此循著類的繼承鏈往上找,直到找到該函式或者查詢完最後乙個類。如果不能在類或其相關基類中找到該名字,則呼叫出錯;

(3)一量找到了該,就進行常規型別檢查,檢視如果給定找到的定義,該函式呼叫是否合法。

(4)假定函式呼叫合法,編譯器就生成**。如果函式是虛函式且通過指標呼叫,則編譯器生成**以確定根據物件的動態型別執行哪個函式版本,否酵母菌,編譯器生成**直接呼叫函式。

4、不能通過定義視窗儲存派生類物件來儲存基類物件,沒有從基類型別到派生型別的標準轉換。唯一可行的選擇可能是使用容器來儲存物件的指標。

5、更加嚴格的繼承規則應當是:若在邏輯上b 是a 的「一種」,並且a 的所有功

能和屬性對b 而言都有意義,則允許b 繼承a 的功能和屬性。

C 物件導向程式設計 知識筆記(二)

示例 include using namespace std const float pi 3.14159 定義常變數 intmain 執行程式輸出3.14159 const可以使用在主函式的外部,其意義為定義乙個變數不過這個變數是無法改變的常變數。c語言中也存在類似的函式 define 但兩者存在...

c 物件導向程式設計(二)

一 裝箱與拆箱 裝箱轉換允許將 值型別 隱式轉換為 引用型別 存在下列裝箱轉換 從任何 值型別 包括任何 列舉型別 到型別object。從任何 值型別 包括任何 列舉型別 到型別system.valuetype。從任何 值型別 到 值型別 實現的任何 介面型別 從任何 列舉型別 到system.en...

C 學習筆記 物件導向程式設計

1.什麼是類 物件和成員?類 乙個類包含很多的物件。比如人類就是乙個類,張 三 李四等是人類的物件,這些物件擁有人類共同的功能和資料,如身高 體重 年齡等,而具體化這些資料我們可看做是人類的成員變數。所以類是由若干個變數和相關函式組成,而物件則擁有這些變數和函式。2.如何宣告乙個類?類只有先宣告才能...