物件導向設計_C++1,物件導向設計_c
精通一門語言不適合我,我喜歡快速掌握一門語言的50%。
物件導向程式設計的三大特點是:封裝、繼承、多態。相對與面向過程,封裝實現了類的介面和實現的分離,其中介面是使用者可以使用的函數,實現包括了私人函數、私人資料等;繼承,實現了代碼的複用;多態是物件導向的核心,通過虛函數實現介面複用,增加編程的方便和多樣性。
類的成員主要包括資料成員和成員函數,也可能有類型成員,如:typdef int num;類對象的大小,就是非待用資料成員的大小,而靜態成員存放在全域資料區。成員函數與面向過程的函數一樣,也是存放在代碼區。只不過每個成員函數都有一個隱藏的this形參,this形參的類型是A * const,即指向類類型的常量指標。當通過類對象調用成員函數的時候,會將對象的地址賦值給this形參,成員函數中對類中非待用資料成員的操作都是通過this指標實現的。
const函數中,const修飾的就是this形參。
一個類中有幾個特殊函數,如果使用者沒有自訂這些函數,編譯器會為我們定義。其中包括了:建構函式,拷貝建構函式,賦值運算子以及解構函式。
函數:一般類型的參數可以通過寄存器傳遞,將實參先賦值給某些特定的寄存器,然後跳轉到調用函數的代碼,再將寄存器賦值給調用函數的形參。返回值也一樣,函數執行完後,將返回值賦值給一個寄存器,然後回到函數的調用位置,繼續執行,如果要使用返回值的話,就特定寄存器的值賦給一個變數,如果不用,則寄存器可以為程式所用,裡面的值不知道什麼時候就會被覆蓋。如果傳遞的是一個類,結構體等,則參數和返回值會通過記憶體中的某些空間,實現傳遞。
引用都會轉換成指標操作。
建構函式:與類名相同,無返回值,實現對類成員的初始化。初始化的方式最好選擇初始值列表,如果在函數體初始化,則資料成員已經完成了預設初始化,函數體內是對資料成員的賦值而已。
拷貝建構函式:第一個參數是自身類類型的引用的建構函式。用於通過=初始化對象,以及參數和返回值是非引用時,傳參和返回返回值。類對象通過()完成初始化時,編譯器會選擇最合適的建構函式,也可能選擇拷貝建構函式。
賦值運算子:將=運算子多載。重載運算子本質上是函數,賦值運算子就是一個名為operator=的函數。一般的形式是:A& operator=(const A&);
解構函式:函數名由波浪線加類名組成,無返回值和參數。包括了函數體和析構部分(隱藏),先執行函數體,後執行析構部分,與建構函式相反。銷毀類類型的成員時,會調用起解構函式,內建類型沒有解構函式,銷毀時什麼都不做。