面向對象的基本概念有對象、類、抽象、封裝、繼承、多態、接口等
有的人說面向對象有四大基本特征,抽象,封裝,繼承,多態,但其實抽象可以拋出在外,本質來說,面向對象的基本特征是繼承,封裝,多態。
先來說C++中的對象和類:
類是對象的抽象,而對象是類的具體化,而要使用類的功能,具體就要先定義一個對象
例如:class Student { }; Student stu里面的stu就是對象 還有一種定義的方法 class { }stu1,stu2;
封裝:其實封裝和抽象可以歸結到一起,抽象的是具體的實現,封裝的是接口,封裝就是將抽象得到的數據和行為(或功能)相結合,形成一個有機的整體,也就是將數據與操作數據的源代碼進行有機的結合,形成”類”,其中數據和函數都是類的成員。封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是要通過外部接口,特定的訪問權限來使用類的成員。封裝可以隱藏實現細節, 使得代碼模塊化。
封裝的簡單一句話:封裝就是將實例抽象得到的數據和行為(或功能)封裝成一個類。
繼承:繼承是指這樣一種能力,它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴展。其繼承的過程,就是從一般到特殊的過程,它是類與類之間的一種關系,一個類通過繼承的方法,可以得到另一個類屬性和方法,達到代碼重用的目的。
引申:
繼承,有三種繼承方法,分為實現繼承,接口繼承,可視化繼承。
實現繼承就是重新寫一個函數去實現。用純虛函數實現。
接口繼承是指純粹繼承父輩的老底,也可以去重新實現。用虛函數實現。
可視化繼承則是純粹的全部自己實現,自己功能自己解決。對應的是非虛函數。
多態:C++多態性是通過虛函數來實現的,虛函數允許子類重新定義成員函數,而子類重新定義父類的做法稱為覆蓋或者稱為重寫。而重載則是允許有多個同名的函數,而這些函數的參數列表不同,允許參數個數不同,參數類型不同,或者兩者都不同。關於多態,簡而言之就是用父類型別的指針指向其子類的實例,然后通過父類的指針調用實際子類的成員函數
多態簡單一句話:一種調用,多種狀態(一個接口,多種方法)
引申:
重載
同一個類中,函數名相同,參數列表不同的函數之間是重載關系。
覆蓋
子類重寫父類的虛函數,函數名相同,參數列表相同,返回值相同的虛函數。
隱藏(有兩種情況)
1. 派生類的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字。
2. 派生類的函數與基類的函數同名,並且參數也相同。但是基類函數沒有virtual關鍵字。