C++day09 學習筆記

來源:互聯網
上載者:User

1、類型封裝
   類 --> 對象
   描述 : (1)屬性
           (2)行為    ---屬性和行為是屬於類的
   建立對象。

2、建構函式 --- 初始化對象
   (1)建構函式名字必須與類名一樣
   (2)建構函式不能寫傳回型別
  
   建構函式在建立對象時,系統自動調用
  
   建構函式允許重載,按使用者要求,適應多種情況
   當類中一個建構函式都沒有的時候,系統提供預設無參的建構函式
   但如果在類中定義了一個建構函式,系統就不提供預設的了,所以,建議,在寫建構函式時,都要寫一個無參的建構函式

3、對類的安全的定義
   變數 -> 私人 -> private  保護變數,防止外界隨意修改,只能在類的內部使用(只能被自己的成員函數使用)
   函數 -> 公有 -> public
  
   為保證私人變數也能為外界訪問,在類內部提供set,get方法
   set方法沒有傳回值,但要求有參數
   get方法肯定有傳回值,沒有參數

4、定義類的步驟
   (1)寫屬性的行為
          成員變數   函數
   (2)成員變數--> private
         成員函數 --> public
    (3)特殊函數
       建構函式,建議寫2個。一個有參數的,一個無參的
       get,set函數,一個成員變數對應一對get,set函數,是外界訪問此變數的唯一途徑
            對於setXXX函數,沒有傳回值,有參數,參數的類型與被賦值的屬性類型一致。
            對於getXXX函數,沒有參數,有傳回值,傳回值的類型與輸出的屬性類型一致。
       類的行為

5、封裝
   定義類的過程就是封裝
  
練習:封裝一個account類型
                屬性:id , password ,name ,balance
                行為:save , withdraw , query
               
6、把account類拆成多檔案結構
   (1)方便快速探索整個類定義
   (2)使用方便,包含標頭檔即可
  
   long Account::getId(){...........}
   在函數實現時,函數前把類名加上,確定函數的所有權,避免2個類中有同名的函數,編譯出錯。
   " :: "稱為域存取控制符。

7、Person per ;  建立了一個對象,系統調用建構函式。
   Person *p = NULL ; 聲明一個類的指標,系統是不會調用建構函式的
  
   Person * p = NULL;
   p = new Person ; 在堆中申請一個類空間
   delete p;
   在堆中的資料沒有名字,只能通過指標訪問類對象,訪問類的成員變數:
   (*p).sayHello();
   p->sayHello();
  
   Person ps[5];聲明一個Person類型的數組,會調用5次建構函式
                數組在聲明的時候,系統會為其分配空間
                並且在聲明數組的時候,沒有機會指定建構函式,只會調用無參的建構函式
               
   當一個類定義中沒有無參的建構函式,但要聲明一個類的數組時,可以聲明一個指標數組
   Person *ps[5];  ---聲明指標的時候,類對象沒有建立,數組中每個元素都是Person類型的指標,達到:
   (1)不用建構函式
   (2)實現使用對象

   for(int i = 0 ; i <5 ; i++){        ps[i] = new Person(i , 20+i);   //用迴圈初始化每個指標   }   for(int i = 0 ; i < 5 ; i++){        delete ps[i];                   //釋放指標指向的空間        ps[i] = NULL ;   }

8、課堂練習:
   要求:main()函數中不能寫代碼,在運行程式時,列印“Hello World”
   答案:全域變數的初始化操作在main函數執行之前就已經初始化了。因此,可以寫一個全域變數的類,其無參建構函式寫輸出語句。
         然後聲明一個類的全域對象。
        
9、在建構函式中,當成員變數名稱和形參名稱相同,避免衝突的方法:
   在每個對象內部都有一個名為this的指標,指向自己,使用自己的成員變數 this->name
  
10、解構函式
    當對象的生命週期結束,系統要回收空間,會自動被調用
    申請的所有資源(new char[20]),在解構函式中釋放  
    若對象是在main函數中的變數,在main函數結束之後,才會調用解構函式
    若對象是一個函數中的局部變數,在函數返回時,調用解構函式
   
    解構函式調用 : 對象生命週期結束,系統自動調用解構函式
                    可以把釋放資源的代碼寫在解構函式中
                   
    解構函式的寫法:建構函式前加 “~”
                    不能重載,不能有參數
                   
    若不寫解構函式,系統會提供預設的解構函式
   
    當類中用到了系統空間:new記憶體,開啟檔案
    就需要寫解構函式,釋放資源

11、作業:(1)利用物件導向的思想實現棧結構,並自己寫main函數測試。

          (2)把原來的銀行系統改成物件導向的形式。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.