封裝即通過類將物件的屬性以及方法結合起來,僅對外提供介面。
封裝的好處
繼承:不同繼承方式下派生類的繼承模型,分為共有繼承和私有繼承兩種。
公有繼承
理解
共有繼承體現」是乙個「含義。公有繼承中對基類所適用的任何東西,也都適用於派生類。
如:雖然正方形是特殊的矩形,但是物件改變時,長方形長寬不需要同時變而正方形需要同時變,所以不能說正方形共有繼承於矩形。
當類d從類b公有繼承時,每乙個d是乙個b,反之不成立。如:
class
person
private
:char _name[20]
;char _addr[30]
;int _age;};
class
student
:public person
;
可以說每個學生是乙個人,但不可以說每個人都是學生。
區分介面繼承和實現繼承
純虛函式:必須在繼承的類中重新宣告,並且在抽象類中常無定義。【純虛函式使基類成為抽象類,不可例項化】
非純虛函式:子類必須支援這個函式的實現,若子類中不提供實現方法則採用基類中的。
非虛函式:不會改變行為,不可以在子類中重新定義。為這個類建立一種特殊的不變性。
私有繼承
理解
私有繼承體現「用…實現」,如果d私有繼承自b,d的物件用b的物件實現,不存在概念上的關係。
繼承和模板
對於乙個類而言,若對於不同的型別,其方式完全不同,則更加適合用繼承。【繼承不適合建立堆疊】
當物件型別不影響類中函式的行為時,使用模板生成這一組類。
理解
多型即某乙個事物在不同的情況體現不同的狀態,即為多型。可分為靜態型別的多型和動態型別的多型。
c++中實現多型
靜態多型是通過過載和模板技術實現,在編譯的時候確定。動態多型通過虛函式和繼承關係來實現,執行動態繫結,在執行的時候確定。
c++中共有三種實現多型的方式。。第一種是函式過載;第二種是模板函式;第三種是虛函式(函式覆蓋)。
前提
重寫
若用final關鍵字修飾虛函式,則虛函式不能被派生類重寫。
什麼時候把基類虛構函式設為虛函式?
若派生類中涉及資源管理,那麼最好將基類中析構函式設為虛函式。此時一旦沒有構成重寫,編譯器不會報錯但不會實現多型。
例外
體現
在**執行時,根據基類的指標(引用)指向不同子類的物件,呼叫對應的子類的虛函式。
如:
class
person
virtual
void
show()
private
:char _name[20]
;char _addr[30]
;int _age;};
class
student
:public person
virtual
void
show()
private
:char _name[20]
;char _addr[30]
;int _age;};
intmain()
C 物件導向三大特性
封裝就是將成員變數和成員方法等集合在乙個個的類中,通過給類及類中的成員變數 屬性和方法設定不同的訪問修飾符 public protected internal protected internal private 來控制它們的作用範圍,使用時呼叫它的方法,或者給它的變數賦值。封裝的意義在於保護或者防...
物件導向三大特性
什麼是物件導向呢?之前我們做一件事的時候,常常是確定,先幹什麼,然後怎麼做,最後可以完事了。其實我們不妨這麼想一下,我們做事的時候是可以這樣的 這件事中涉及了什麼物件角色?如果我要把這件事做成那麼就需要物件之間是如何協作的?第二種方法,就是今天說的物件導向的方法了,好處正在慢慢體會。今天我想說的物件...
物件導向三大特性
0x00 嘮嘮叨叨 只是做乙個概念的記錄 0x01 物件導向的三大特性 n 封裝 把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。類將成員變數和成員函式封裝在類的內部,根據需要設定訪問許可權,通過成員函式管理內部狀態。n 繼承 繼承所表達的是類...