<1>什麼是物件導向的思想
c語言是面向過程的語言,
c++是c語言的拓展,
c++是物件導向的語言,而
物件導向是一種思想
,即oop思想。如下圖所示,
實體:就
是客觀存在並可相互區別的事物
,例如人、書本、動物等。人作為實體,具有姓名、性別、年齡等這些屬性以及吃飯、睡覺等行為。 類
:是對現實生活中一類具有共同特徵的事物的抽象,可以將資料和函式封裝在一起,即類包含成員變數和成員方法。類的本質是型別,不是資料,所以不存在於記憶體中,不能被直接操作,只有被例項化為物件時,才可操作。例如
「學生」
這個類可以「
學習」,而「木頭」
這個類就不會學習。 物件
:物件是類(class)的例項
化,物件可以操作。
所以物件導向的思想就是,將現實中的問題即實體的屬性、行為抽象成adt抽象資料型別、方法,然後抽象成類的成員變數(屬性)、成員函式(行為)。最後把類例項化為物件,成員變數針對物件來說是私有的,成員方法針對物件來說是公有的。
<2>物件導向的思想的特徵
物件導向有三大特徵:封裝性、繼承性、多型性。
(1)封裝性指的是隱藏了物件的屬性和實現細節,僅對外提供公共的訪問方式,這樣就隔離了具體的變化,便於使用,提高了復用性和安全性。
類提供關鍵字public、protected和private用於宣告哪些資料和函式是公有的、受保護的或者是私有的。這樣可以達到資訊隱藏的目的,即讓類僅僅公開必須要讓外界知道的內容,而隱藏其它一切內容。
封裝:只隱藏物件的屬性和實現細節,僅對外提供公共訪問方式 優點
:將變化隔離、便於使用、提高復用性、提高安全性
原則:將不需要對外提供的內容隱藏起來;把屬性隱藏,提供公共方法對其訪問
(2)繼承性,就是
在乙個已存在的類的基礎上建立乙個新的類,新的類具有它所繼承的類的全部特性,且可以增加一些新的特性。
派生類繼承了基類的全部資料和函式,並具有自己私有的資料和函式,是「is a」的關係。
這就提高了**的復用性。繼承是作為多型的前提的。
繼承:提高**復用性;繼承是多型的前提
成員變數、成員方法、作用域、靜態成員方法均可以繼承,析構函式、建構函式、友元函式不能繼承。
為什麼析構函式不能被繼承呢?
子類繼承父類,就是繼承了父
類的成員函式
和成員變數。初始化子類時,會先自動呼叫父類的
建構函式
。然後才呼叫子類的
建構函式
,析構時,按相反順序進行。就是先構造的後析構,構造時首先會呼叫基類的
建構函式
,然後呼叫成員物件的建構函式。析構則嚴格按照與構造相反的次序執行,如果違背編譯器將無法自動執行析構過程。
(3)多型性從系統實現的角度來講可以劃分為兩類:靜多型和動多型,以前學過的函式過載和運算子的過載屬於靜態多型性,在程式編譯時就能決定呼叫的是哪乙個函式,靜態多型是通過函式的過載來實現的(運算子過載實際上也屬於函式的過載)。動態多型性是程式執行過程中才動態地確定操作所針對的物件,執行時多型性是通過虛函式來實現的。多型的靜多型和動多型,即早繫結和晚繫結。
靜態多型:編譯器在編譯期間完成的,編譯器根據函式實參的型別(可能會進行隱式型別轉換),可推
斷出要呼叫那個函式,如果有對應的函式就呼叫該函式,否則出現編譯錯誤。
動態繫結:在程式執行期間(非編譯期)判斷所引用物件的實際型別,根據其實際型別呼叫相應的方法。使用virtual關鍵字修飾類的成員函式時,指明該函式為虛函式,派生類需要重新實現,編譯器將實現動態繫結。
動多型發生的條件: 1、
指標指向乙個完整的物件。
2、通過基類指標或引用呼叫基類的虛函式。
物件導向的思想
物件導向的好處 1.物件導向是一種更符合人們思考習慣的一種思想 2.面向過程的更多體現是執行者 物件導向更多體現的是指揮者 3.有了物件導向這個事情後 複雜問題就簡單化了 大西瓜如何用挖掘機炒菜?幾個事物 2事物 大西瓜 name age 屬性 行為 會開挖掘機 挖掘機 color lunzi 翻炒...
物件導向的思想
如果ob1.equals ob2 true,則兩者的hashcode一定相等,但是反過來卻不成立。介面的概念 從使用者 使用實現 的角度來看,讓使用者不知道內部,也無需關心內部組成,只是留出乙個介面,讓使用者去使用就行 強調合約,強調協作雙方無法犯錯。介面與類相比 由編譯器強制的乙個模組間協作的合約...
物件導向的思想
物件導向是一種思想,是基於面向過程而言的,就是說物件導向是將功能等通過物件來實現,將功能封裝進物件之中,讓物件去實現具體的細節 這種思想是將資料作為第一位,而方法或者說是演算法作為其次,這是對資料一種優化,操作起來更加的方便,簡化了過程。物件導向有三大特徵 封裝性 繼承性 多型性,其中封裝性指的是隱...