C++ 進階 教學 : 物件導向的基本觀念

C++ 進階 教學 : 物件導向的基本觀念


好的頻道需要你的支持,謝謝你使用Youtube影片的超級感謝功能給我們鼓勵。





好的頻道需要你的支持,謝謝你使用Youtube影片的超級感謝功能給我們鼓勵。

  1. 物件
    • 何謂物件
    • 執行環境依照類別中的宣告,所配置的記憶體群組。它可以儲存一群資料,而該群資料可以完整的描述一個特定的運算單位。例如:一群可以完整描述一張訂單的資料、一群可以完整描述購買者的資料、一群可以完整描述一件商品的資料、一群可以完整描述日期時間的資料、一群可以完整描述信用卡付款的資料...。

      也就是說:一個記憶體群組,代表一個特定運算單位的完整資料。這一個記憶體群組,我們就稱之為物件。

      所以就程式語言的角度上也可以說:物件一群記憶體的集合。

    • 物件擁有什麼
      • 資料成員(Data Members) => 儲存資料(變數)。
      • 很多文件的解說中稱之為屬性或狀態。在 Java 中稱之為欄位。

      • 成員函式 (Member Functions) => 運算資料。
      • 很多文件的解說中稱之為行為或能力。在 Java 中稱之為方法。

    • 為什麼要使用物件導向
    • 在物件導向之前是函式導向。隨著運算複雜度的提升,各語言也逐一的支援物件導向。物件導向與函式導向的基本差異是:物件儲存資料,物件運算資料

      以 C / C++ 語言為例,在函式導向時期(C 語言時期),雖然可以用結構(struct)宣告一個新型別,集合一群資料。但是,那一群資料本身並不具有運算能力,它只能當參數讓函式運算。所以,資料與運算資料的函式是沒有關係的

      到了物件導向時期(C++ 時期),改用類別(class)來宣告新型別。依照類別的宣告建立的物件,除了是一群資料的集合之外,本身也具有運算的能力。也就是說:資料與運算資料的函式是屬於同一個物件的成員


    • 相同類別的物件,一定擁有相同的成員

    • 相同名稱的資料成員,但它的不見得一樣。
      相同名稱的成員函式,但它運算的結果不一定一樣。


    • 每一個物件獨立管理與運算自己的資料

    • 除非特殊的設計需求。基本上,每個物件運算自己的資料。

  2. 類別
    • 什麼是類別
    • 像 int 一樣,是 C++ 中合法的型別
    • 為什麼要開發類別
    • 因為程式有物件的需求,所以依照物件的需求開發類別
    • 類別用來做什麼
      • 宣告變數
      • 宣告指標
      • 宣告參考
      • 物件轉型
      • 物件識別
      • 執行環境製做物件的說明書
    • 類別中有什麼
      • 物件成員=> 物件資料成員,物件成員函式
      • 類別成員=> 類別資料成員,類別成員函式
      • 建構函式(建構子)
      • 其他
  3. 物件變數
    • 宣告
    • ClassName objectName;

      變數宣告時,環境會依照類別中的宣告來建立物件。並把物件的記憶體位址指派給變數。

    • 成員存取
    • objectName.dataMember
      objectName.memberFunction()

      用 變數.成員 的方式,存取物件成員。

    • 指派
    • objectName = otherObjectName;

      變數和物件是挷定的,也就是說這個變數不能再指派另一個物件的記憶體位址給它。指派時是將 '=' 右邊的物件的資料成員的值,複製給 '=' 左邊的物件的資料成員。

    • 物件變數參數
    • 函式原型 : void function(ClassName objectName)
      呼叫敍述 : function(objectName);

      在函式呼叫敍述的小括號中放物件變數時,是把本物件的成員變數的值,複製給函式的物件變數參數。

    • 物件變數返回值
    • 函式原型 : ClassName function()
      呼叫敍述 : ClassName objectName = function();

  4. 物件指標
    • 宣告
    • ClassName * pointerName;
      Or
      ClassName * pointerName = new ClassName;

    • 建立物件
    • new ClassName
      new ClassName()

    • 指派
    • pointerName = memory address;

      Ex:
      pointerName = new ClassName;
      Or
      pointerName = &objectName;
      Or
      pointerName = otherPointerName;

    • 成員存取
    • pointerName -> dataMember
      pointerName -> memberFunction()

      用 指標 -> 成員 的方式,存取物件成員。

    • 物件指標參數
    • 函式原型 : void function(ClassName* pointer)
      呼叫敍述 : function(memory address)

    • 物件指標返回值
    • 函式原型 : ClassName * function()
      呼叫敍述 : ClassName * pointer = function();

  5. 物件變數參考
    • 宣告
    • ClassName & referenceName = objectName;

    • 物件變數參考參數
    • 函式原型 : void function(ClassName & referenceName)
      呼叫敍述 : function(objectName)

    • 物件變數參考返回值
    • 函式原型 : ClassName & function(ClassName & referenctName)
      呼叫敍述 : function(objectName)

  6. 物件指標參考
    • 宣告
    • ClassName *& referenceName = pointerName;

    • 物件指標參考參數
    • 函式原型 : void function(ClassName *& referenceName)
      呼叫敍述 : function(pointerName)

    • 物件指標參考返迴值
    • 函式原型 : ClassName *& function(ClassName *& referenceName)
      呼叫敍述 : function(pointerName)

作者 : 許裕永