物件導向筆記

來源:互聯網
上載者:User

1、物件導向

物件導向編程總結為一句話:向對象發送訊息。

物件導向的程式模組由類構成。  

2、類
(1)每個類都定義可一個介面和一個實現。

介面:有該類地代碼需執行地操作組成。實現:包括該類所需要地資料。 

(2)定義資料成員

不能把資料成員(像定義變數一樣)的初始化作為其定義地一部分,只能指定資料成員地名字和類型。只能通過建構函式地特殊成員函數控制初始化。 

(3)struct和類

 C++中struct也可以有public、private和protect屬性。struct成員預設為public,而class成員預設為private。

 

(4)private和protect

private:只有該類的建立者和該類的內部成員函數可以訪問

protect:繼承的結構可以訪問。

(5)成員函數

 成員函數是類的行為,是程式演算法實現的部分,是對封裝的資料進行操作的唯一途徑。成員函數的聲明是在類主體中;具體實現在類定義之外,並且要指明類的名稱。ex:

     return_type  calss_nane::func(type  parameter)

     {

                body

     }     

(6)內聯成員函數

隱式申明:  將函數主體直接放在類主體內。

顯示聲明: 在類主體外實現--函數實現時加上inline關鍵字。

(7)對象

 對象是該類類型的某一特定實體。聲明:   類型     對象名

 申明了類及其對象,就可以訪問對象的公有成員:    對象名.公有成員函數名(參數表)      

(8)建構函式

是一個特殊的成員函數,定義如何初始化該類的對象。它將在對象建立時被系統自動調用。

建構函式的函數名和類名相同,且沒有傳回值。

若沒定義建構函式, 編譯器會自動產生一個預設的建構函式。

定義好建構函式後,可以這樣聲明並初始化對象:    類名    對象名(參數列表)

(9)拷貝建構函式

是一種特殊的建構函式,具有一般建構函式的特性,其形參是本類對象的引用。其作用是使用一個已存在的對象去初始化一個新的同類的對象。

若沒有定義拷貝建構函式,系統會自動產生一個預設的建構函式,其功能是把初始值對象的每個資料成員的值都複製到建立的對象中。ex:

         class   point{

                public:        

                        point(int x  = 0, y = 0);     //建構函式(需要在類外實現)

                        point(point  &p);                 //拷貝建構函式(需要在類外實現)

                private:

                        ......

        };

(10)解構函式

用來完成對象被刪除前的清理工作。在對象的生存周期結束的時候由系統自動調用。若為顯示定義,系統將自動產生一個不做任何事的預設解構函式。

       ex:        ~clock(){}

(11)類的組合

一個類內嵌其他類的對象作為成員。組合建構函式定義:

類名::類名(形參表):內嵌對象1(形參表),內嵌對象2(形參表),……  { 類的初始化}

對本類的資料成員也可以這樣初始化,ex: 類名::類名(形參表):資料成員(值)

(12)類模板

為類申明一種模式,使得類中的某些資料成員、成員函數的參數或傳回值能取任意類型。樣本:

       template    <class  T>                                        //類模板:實現對任意資料類型的資料進行存取

       class  store {  

            private:                                                     

                T   item;                                                     //item用於存放任意資料類型的資料

                int value;

             public:   

                ......

      } ;      

模板類的成員函數必須是模板函數。預設形式建構函式的實現

      template  <class  T>

       store <T>::store(void):value(0)

       {   }

(13)類的待用資料成員

類的普通資料成員在類的每一個對象中都擁有一份拷貝。

類的待用資料成員,採用static聲明;每個類只有一個拷貝,由該類的所有對象共同維護和使用,實現了不同對象間的資料共用。待用資料成員不屬於任何一個對象,所以只能通過“類名::標識符進行訪問”          

(14)類的靜態函數成員

a、對普通函數成員的調用必須通過對象名。對以公有的靜態成員函數可以通過類名或對象名兩種方式來調用。

 b、靜態成員函數可以直接存取該類的待用資料和函數成員;而訪問非待用資料成員,必須通過對象名來訪問(麻煩啊)。

(15)友元

 a、友元函數:在類聲明中由關鍵字frined修飾的非成員函數。友元函數不是本類的成員函數,在它的函數體中可以通過對象名訪問類的私人和保護成員。

 b、友元類:若A類為B類的友元類,則A類的所有成員函數都是B類的友元函數,都可以訪問B類的私人和保護成員。

            class  B    {

                   ...

                  friend    class    A;

                   ...

            };

(16)繼承與派生

繼承,是新的類從已有的類那裡得到的以後特性。從已有類(基類)產生新類(衍生類別)的過程就是派生。衍生類別聲明樣本:

      class Drive : public Base1,private Base2                  //衍生類別Drive分別以public和private的方式繼承基類Base1和Base2

      {

            public:

                Drive();                                                            //添加類建構函式(基類中的建構函式和解構函式是不能被繼承下來的)

               ~Drive();                                    

      }  ;

a、衍生類別產生過程:

吸收基類成員、改造基類成員、添加新的成員

b、存取控制:

公有繼承、私人繼承、保護繼承。(任何情況基類的私人成員通過衍生類別都是不能訪問的)

c、範圍分辨符“::”:

解決同名情況下對基類成員的訪問的二義性。

        Drive.info                    //訪問Dirve的類成員

        Drive.Base::info          //訪問Drive基類的類成員

d、虛基類

將共同基類設定為虛基類,這時從不同的路徑繼承過來的同名資料成員在記憶體中就只有一個拷貝,同一個函數名也只有一個映射。這樣就解決了同名成員的唯一標識問題。

如果虛基類定義有非預設形式的建構函式,在所有衍生類別中都必須在建構函式的成員初始化表中列出對虛基類的初始化。(在建立對象時,只有最遠衍生類別的建構函式會調用虛基類的建構函式)

(17)多態

多態是指同樣的訊息被不同類型的對象接收時導致完全不同的行為。分為:重載多態、強制多態、包含多態和多重參數變形。

a、運算子多載(實質是函數重載)

表達形式: 傳回型別 operator 運算子(參數表){ }      

作為類成員的重載函數時,其形參看起來比運算元數目少1。作為成員函數的操作符有一個隱含的this形參,限定為第一個運算元。

b、虛函數

虛函數是以virtual修飾的成員函數(不能將建構函式聲明為虛函數),以實現多態性。

c、純虛函數

純虛函數是一個在基類中聲明的虛函數,沒有函數體(即基類中不再給出函數的實現部分),它在基類中沒有定義具體的操作內容,要求各衍生類別根據實際需要定義自己的版本。

d、抽象類別:帶有純虛函數的類

 (17)this指標

指向本類對象的隱含指標。

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.