1. 程式人生 > 其它 >C++封裝繼承多型的理解

C++封裝繼承多型的理解

封裝:
也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。封裝是面向物件的特徵之一,是物件和類概念的主要特性。

繼承(inheritance):C++通過類派生機制來支援繼承。被繼承的型別稱為基類或超類,新產生的類為派生類或子類。保持已有類的特性而構造新類的過程稱為繼承。在已有類的基礎上新增自己的特性而產生新類的過程稱為派生。繼承和派生的目的是保持已有類的特性並構造新類。

繼承的目的:實現程式碼重用。派生的目的:實現程式碼擴充。三種繼承方式:public、protected、private。

繼承時的建構函式:(1)、基類的建構函式不能被繼承,派生類中需要宣告自己的建構函式;(2)、宣告建構函式時,只需要對本類中新增成員進行初始化,對繼承來的基類成員的初始化,自動呼叫基類建構函式完成;(3)、派生類的建構函式需要給基類的建構函式傳遞引數;

多型:
就是指一個類例項的相同方法在不同情形有不同表現形式。多型機制使具有不同內部結構的物件可以共享相同的外部介面。這意味著,雖然針對不同物件的具體操作不同,但通過一個公共的類,它們(那些操作)可以通過相同的方式予以呼叫。

多型(Polymorphic)性可以簡單地概括為“一個介面,多種方法”,程式在執行時才決定呼叫的函式。C++多型性是通過虛擬函式來實現的,虛擬函式允許子類重新定義成員函式,而子類重新定義父類的做法稱為覆蓋或者稱為重寫。而過載則是允許有多個同名的函式,而這些函式的引數列表不同,允許引數個數不同,引數型別不同,或者兩者都不同。關於多型,簡而言之就是用父類型別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。

多型的目的則是為了介面重用

C++中,實現多型有以下方法:虛擬函式、抽象類、過載、覆蓋、模板。

函式過載(Overload):指在相同作用域裡(如同一類中),函式同名不同參,返回值則不用理會,不同參可以是不同個數,也可以是不同型別。效果:根據實參的個數和型別呼叫對應的函式體。

函式覆蓋(Override)(函式重寫):指派生類中的函式覆蓋基類中的同名同參虛擬函式,因此作用域不同。效果:基類指標或引用訪問虛擬函式時會根據例項的型別呼叫對應的函式。

函式隱藏(Hide):對於子類中與基類同名的函式,如果不是覆蓋那就成了隱藏。兩種情況:(1)、同名不同參;(2)、同名同參但基類不是virtual函式。