根源為總結
物件導向的程式語言不止僅僅多了個類,類可以明顯感覺到抽象和封裝。抽象的是具體的實現,封裝的是介面。
繼承,分為實現繼承,介面繼承,視覺化繼承。
實現繼承就是重新寫乙個函式去實現。這兒用的是純虛函式。父輩純虛,子輩必須重新實現。
介面繼承是指純粹繼承父輩的老底,也可以去重新實現。這是虛函式。
視覺化繼承則是純粹的全部自己實現,自己功能自己解決。對應的是非虛函式。
繼承的時候父子有幾種關係,比如b繼承a,一種是泛化,換句話就是b是a的一種,比如老師一種人,學生是一種人。殺人犯也是一種人。這叫泛化。這兒可以介面繼承或者視覺化繼承。因為本質是一種的關係麼。這兒可以直接用父輩的老底。
在一中是聚合,聚合呢就是b是a的一部分,但是b不是一種a,比如頭有眼睛鼻子嘴巴耳朵,這樣就要獨自去實現。這兒用到的是介面繼承和純虛類。畢竟不能說眼睛是頭的一種麼,要自己去實現很多的東西。
以上繼承的本質是為了更方便的**復用,而多型則是介面復用。介面復用可以用過載函式來做,也可以用類的多型性來進行。
多型,則更多的是可以用子輩賦給父輩的引用或者指標,然後可以在執行的時候去實現訪問子類。這樣就看似是乙個,還有待補充。慢慢來。看圖很不錯的。
多型**
//小結:1、有virtual才可能發生多型現象
// 2、不發生多型(無virtual)呼叫就按原型別呼叫
#includeusing namespace std;
class base
令人迷惑的隱藏規則
本來僅僅區別過載與覆蓋並不算困難,但是c++的隱藏規則使問題複雜性陡然增加。
這裡「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,規則如下:
(1)如果派生類的函式與基類的函式同名,但是引數不同。此時,不論有無virtual
關鍵字,基類的函式將被隱藏(注意別與過載混淆)。
(2)如果派生類的函式與基類的函式同名,並且引數也相同,但是基類函式沒有virtual
關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)。
上面的程式中:
(1)函式derived::f(float)覆蓋了base::f(float)。
(2)函式derived::g(int)隱藏了base::g(float),而不是過載。
(3)函式derived::h(float)隱藏了base::h(float),而不是覆蓋。
C 物件導向(封裝,繼承,多型)
c 封裝繼承多型總結 物件導向的三個基本特徵 物件導向的三個基本特徵是 封裝 繼承 多型。其中,封裝可以隱藏實現細節,使得 模組化 繼承可以擴充套件已存在的 模組 類 它們的目的都是為了 重用。而多型則是為了實現另乙個目的 介面重用!封裝 什麼是封裝?封裝可以隱藏實現細節,使得 模組化 封裝是把過程...
C物件導向(封裝 繼承 多型)
物件導向的基本思考方式是的將資料和處理資料的行為放在一起,降低耦合性,其要點就是不要將資料和處理資料的行為分開。所謂多型性就是指從呼叫者的角度看物件,會發現它們非常相似,難以區分,但是這些被呼叫物件的內部處理實際上各不相同。結構體宣告和呼叫 typedef struct validator vali...
物件導向的4要素 抽象,封裝,繼承,多型
在平時說到物件導向的特性的時候,一般的答案有幾種。如果是物件導向的3大基本特徵 抽象,繼承,多型 封裝,繼承,多型 如果是4特徵 抽象,封裝,繼承,多型 可見抽象與封裝這兩個概念其實聯絡是很緊密的。而我確實想要搞清楚具體的含義,今天進行乙個總結。其中關於抽象與封裝,以 大全為主要參考。關於多型以c ...