C++ 進階 教學 : 物件導向的基本觀念
C++ 進階 教學 : 物件導向的基本觀念
好的頻道需要你的支持,謝謝你使用Youtube影片的超級感謝功能給我們鼓勵。
- 物件
- 何謂物件
- 物件擁有什麼
- 資料成員(Data Members) => 儲存資料(變數)。
- 成員函式 (Member Functions) => 運算資料。
- 為什麼要使用物件導向
- 相同類別的物件,一定擁有相同的成員
- 每一個物件獨立管理與運算自己的資料
- 類別
- 什麼是類別
- 為什麼要開發類別
- 類別用來做什麼
- 宣告變數
- 宣告指標
- 宣告參考
- 物件轉型
- 物件識別
- 執行環境製做物件的說明書
- 類別中有什麼
- 物件成員=> 物件資料成員,物件成員函式
- 類別成員=> 類別資料成員,類別成員函式
- 建構函式(建構子)
- 其他
- 物件變數
- 宣告
- 成員存取
- 指派
- 物件變數參數
- 物件變數返回值
- 物件指標
- 宣告
- 建立物件
- 指派
- 成員存取
- 物件指標參數
- 物件指標返回值
- 物件變數參考
- 宣告
- 物件變數參考參數
- 物件變數參考返回值
- 物件指標參考
- 宣告
- 物件指標參考參數
- 物件指標參考返迴值
執行環境依照類別中的宣告,所配置的記憶體群組。它可以儲存一群資料,而該群資料可以完整的描述一個特定的運算單位。例如:一群可以完整描述一張訂單的資料、一群可以完整描述購買者的資料、一群可以完整描述一件商品的資料、一群可以完整描述日期時間的資料、一群可以完整描述信用卡付款的資料...。
也就是說:一個記憶體群組,代表一個特定運算單位的完整資料。這一個記憶體群組,我們就稱之為物件。
所以就程式語言的角度上也可以說:物件一群記憶體的集合。
很多文件的解說中稱之為屬性或狀態。在 Java 中稱之為欄位。
很多文件的解說中稱之為行為或能力。在 Java 中稱之為方法。
在物件導向之前是函式導向。隨著運算複雜度的提升,各語言也逐一的支援物件導向。物件導向與函式導向的基本差異是:物件儲存資料,物件運算資料。
以 C / C++ 語言為例,在函式導向時期(C 語言時期),雖然可以用結構(struct)宣告一個新型別,集合一群資料。但是,那一群資料本身並不具有運算能力,它只能當參數讓函式運算。所以,資料與運算資料的函式是沒有關係的。
到了物件導向時期(C++ 時期),改用類別(class)來宣告新型別。依照類別的宣告建立的物件,除了是一群資料的集合之外,本身也具有運算的能力。也就是說:資料與運算資料的函式是屬於同一個物件的成員。
相同名稱的資料成員,但它的值不見得一樣。
相同名稱的成員函式,但它運算的結果不一定一樣。
相同名稱的成員函式,但它運算的結果不一定一樣。
除非特殊的設計需求。基本上,每個物件運算自己的資料。
像 int 一樣,是 C++ 中合法的型別。
因為程式有物件的需求,所以依照物件的需求開發類別
ClassName objectName;
變數宣告時,環境會依照類別中的宣告來建立物件。並把物件的記憶體位址指派給變數。
objectName.dataMember
objectName.memberFunction()
用 變數.成員 的方式,存取物件成員。
objectName = otherObjectName;
變數和物件是挷定的,也就是說這個變數不能再指派另一個物件的記憶體位址給它。指派時是將 '=' 右邊的物件的資料成員的值,複製給 '=' 左邊的物件的資料成員。
函式原型 : void function(ClassName objectName)
呼叫敍述 : function(objectName);
在函式呼叫敍述的小括號中放物件變數時,是把本物件的成員變數的值,複製給函式的物件變數參數。
函式原型 : ClassName function()
呼叫敍述 : ClassName objectName = function();
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();
ClassName & referenceName = objectName;
函式原型 : void function(ClassName & referenceName)
呼叫敍述 : function(objectName)
函式原型 : ClassName & function(ClassName & referenctName)
呼叫敍述 : function(objectName)
ClassName *& referenceName = pointerName;
函式原型 : void function(ClassName *& referenceName)
呼叫敍述 : function(pointerName)
函式原型 : ClassName *& function(ClassName *& referenceName)
呼叫敍述 : function(pointerName)