C 初階學習 之 繼承與多型(繼承)

2021-09-11 10:59:15 字數 2716 閱讀 7937

作為一門物件導向的程式語言,構造出的許多物件之間存在著眾多關係。如汽車和車輪,是汽車都有車輪,由汽車類可以引出車輪類。賓士和寶馬或者大眾,不同價位對應著不同品牌的汽車,輸入不同的金額呼叫到的則是不同的類。為了描述這些物件間的層次結構和關係,不同條件下對類的的選擇呼叫,這便引出了c++中修飾物件的機制——繼承與多型。

一、什麼是繼承

繼承(inheritance)機制是物件導向程式設計使**可以復用的最重要的手段,它允許程式設計師在保持原有類特 性的基礎上進行擴充套件,增加功能,這樣產生新的類,稱派生類。繼承呈現了物件導向程式設計的層次結構, 體現了由簡單到複雜的認知過程。以前我們接觸的復用都是函式復用,繼承是類設計層次的復用。

舉個簡單的例子,如果把人類作為基類,那麼他的派生類可以是,職業,行為,資訊等等。

//人

class human

protected:

string _name = "aficis";

int _age = 21;

};//學生類,繼承了人的特性

class student:public human

;//通過學生類物件,可以呼叫人的方法

int main()

二、三種繼承關係修飾符public 父類內的訪問限定符不會做改變。

protected 父類中成員的訪問許可權會發生變化,public降為protected,protected和private修飾的成員則不變。

private 父類中所有成員的訪問許可權都將在派生中變為private。

注意:在實際運用中一般使用都是public繼承,幾乎很少使用protetced/private繼承,也不提倡使用 protetced/private繼承,因為protetced/private繼承下來的成員都只能在派生類的類裡面使用,實際中 擴充套件維護性不強。

三、基類和派生類物件賦值轉換

相反,基類物件則不能給派生類物件賦值,因為賦值只能,多給少時把多的切掉,少給多就沒法給了。

ps:此時我想試一試,類型別指標指向時是不是也有這樣的「切片」規則。如果強制型別轉換呢?

class person

;class student : public person

;void test()

四、繼承中的作用域因此,當子類和父類中有同名成員時,子類物件會優先訪問子類成員,父類同命成員則會隱藏,又稱重定義。如需訪問父類同名成員,需加上作用域限定符。(基類::基類成員)

ps:為了避免錯誤,在繼承體系中,盡可能少用隱藏。

對比過載與隱藏

// b中的fun和a中的fun不是構成過載,因為不是在同一作用域

// b中的fun和a中的fun構成隱藏,成員函式滿足函式名相同就構成隱藏。

六、友元關係不能繼承,也就是說基類友元不能訪問子類私有和保護成員七、基類中的static靜態成員,整個繼承體系裡面只有乙個這樣的成員。無論派生出多少個子類,都只有一 個static成員例項 。

class person

protected :

string _name ; // 姓名

public :

static int _count; // 統計人的個數。

C 初階學習 之 繼承與多型(多型)

一 什麼是多型 多型通俗的來講,就是多種狀態,就是乙個事物在不同條件下表現出的不同狀態。比如出門這件事,受天氣,氣溫不同條件的影響,會表現出不同的狀態,下雨天出門就要打傘,夏天出門就要穿得涼快一點,冬天出門就要穿厚一點。同樣是出門,因外界條件不同,會有多種具體的實現方式。二 多型的定義及實現 在繼承...

C 繼承與多型

派生類繼承基類 又稱父類 超類 的屬性和方法,在此基礎上可以進行修改或新增新的屬性和方法。class 派生類名 繼承方式 基類名 為了保護基類的資料封裝性,無論哪種繼承方式,積累的私有成員在派生類中都是不可見的。1.public繼承 基類的訪問許可權在派生類中不變。公有還是公有,保護還是保護,派生類...

C 繼承與多型

1 分析菱形繼承的問題。2 剖析虛繼承是怎麼解決二義性和資料冗餘的 首先,我們先來看乙個菱形繼承的程式。為了解決以上問題,我們引入虛繼承的語法。可以有效的解決菱形繼承的資料冗餘和二義性問題。1.虛繼承解決了菱形繼承體系裡子類物件包含多份父類物件的資料冗餘問題和浪費空間的問題。2.虛繼承看起來複雜,但...