大一程設-下
東華大學
東華大學資管系
基本程式概念
資管經驗分享
structure 在 C/C++ 裡會被縮寫成 struct,但我們不討論在 C 裡面 struct 怎麼運作,我們只學 C++ 裡怎麼運作即可,而與他非常相像的東西叫做 class,接下來的幾篇筆記會帶例子讓大家了解這兩者的差異,以及講述物件導向的基本概念。
雖說大家一直說物件導向,但究竟甚麼是物件導向呢?
在真的討論什麼是物件之前,我想先跟大家回到一上我們在教資料型態做的事。
還記得基本的資料型態有 short
、int
、long
、float
、double
、bool
、char
,甚麼樣資料型態的變數存甚麼樣的資料,我想這大家並不陌生。
可能隨著我們的需求變多,會使用到 陣列 []
、vector
、指標 *
、函式 function
。
但大家試想一下,光靠這些東西就足夠開發大家平常使用的 APP、瀏覽的網頁、遊玩的遊戲了嗎?其實是完全不夠的,真正的開發需要用到的工具遠超大家的想像。
就單純以資料型態而言,光靠上述的東西完全不夠,有時候有些資料型態我們可能要自訂出來。
這邊就不討論前端的使用者介面該怎麼辦,後端的資料庫要怎麼辦,我們就以開發這件事來看就好(其實就是寫程式啦!)
所以自訂我們所需要的資料型態(工具),就是我們要學物件導向的最開始的原因。
而 structure 和 class 能夠讓我們根據需求自訂資料型態
Orange
整數、浮點數都是一種資料型態。
那假設我今天想要一個資料型態叫做人類,辦的到嗎?
辦的到,這個時候我們就是要定義一個 structure 或 class 叫做人類。
Orange
那人類他一定有多種特色嘛,比方說每個人都有名字、身高、體重、性別、年齡、是否已婚、出生地、隸屬國家、月入薪水…等,非常多的特色。
除了特色,人能夠做的行為/動作還非常多,比方說跑步、跳舞、煮飯、說話、玩遊戲、教書、喝水…等,非常多事情。
而這些特色或是動作(行為),我們都能夠自訂成一包資料型態,就叫做人類。
這就是 structure 跟 class 做的最核心的事情,自訂資料型態。
上面的概念你懂了,我們馬上來自訂一個 人類
資料型態吧!
這邊有一句話希望大家開始刻在心裡,雖然你可能現在無法體會。
類別(結構)是物件的藍圖,根據藍圖將類別(結構)實體化成物件。
這句話可以說是剛開始學物件導向的核心。
各個大神們
在最後一個大括號後面,請記得要加上分號,這是固定語法請一定要遵守,後面的筆記會更深入談這個分號的功用。
馬上來看個例子。
這樣你可能會問,這樣為甚麼叫做自訂一個資料型態呢?
假設今天我們需要一個整數資料型態變數,我們會做宣告
、附值
的動作。
那如果我們今天需要一個人類資料型態變數,也同樣要做宣告
與附值
的動作。
所以透過上方的例子,我們其實自定義了一個資料型態叫做 person
。而我們都知道無論是需要變數、陣列、指標,都需要資料型態。像下面的例子。
不囉嗦直接看 CODE。
在 main 可以看到我宣告了兩個 person ,一個叫做 p1,一個叫做 p2。
我想應該不難理解,他們就像 int、float、string 變數一樣,如果要使用就要宣告出來。
而對我們自定義資料型態的變數,當我們把它宣告出來的這個動作就叫做實體化。
類別(結構)是物件的藍圖,根據藍圖將類別(結構)實體化成物件。
在上例的 28 行跟 35 行,我們宣告了 p1 跟 p2 兩個 person 變數,這個動作就叫做把類別(結構)實體化成物件。
那為甚麼稱為類別(結構)藍圖呢?
藍圖只是一個規格,只要是人類變數,他們都會有藍圖內的屬性跟方法,以上例而言,只要是人類,都會有名字、年紀、是否已婚、體重、身高這些屬性,跟跑、吃、回答名字三種方法。
所以藍圖是抽象的,你必須要根據藍圖把人實體化出來,才真的會有人。
以故事情境來說,如果今天要生產一個蛋糕,一定會有蛋糕的作法(藍圖),大
家會遵照做法(藍圖),把蛋糕給生產(實體化)出來。
希望帶個例子大家會比較好理解。
Orange
實體化(宣告物件)沒問題之後,我們來說一下取用屬性跟方法。在上例的 29 ~ 33,36 ~ 40 行。
每一個人類物件(變數)都有名字、年紀這些屬性或是跑、吃這些方法,而我們在程式碼的做法是實體化一個人之後加上 .
這個符號,還記得一上就說過 .
這個符號代表中文字 的
。
所以
跟上學期很相似的概念是甚麼呢?
一個字串都有詢問長度這個方法。
每一個字串都有詢問長度這個方法(函式)
所以你有感同身受嗎,一個字串其實他是一個被實體化出來的物件,他隸屬於 string 這個類別(藍圖),今天要使用字串,我們把它實體化成一個物件(s1)。
所以為什麼我們從未說過 string 是一個基礎資料型態,像 int 或 float
因為他是自定義資料型態。
Orange
接著你應該有發現,屬性後都沒有括號,因為他只是一個值。像名字、體重、身高…等。
所以千萬不要在不該加上括號的地方加上括號,要加括號代表他是一個函式(方法)。
而取用類別(結構)的函式呢,就如同一上在教 function 一樣,同樣有可能有參數,或者沒有。而一般的呼叫 function 如下。
而物件的函式(方法)就只是多了,隸屬於誰的這樣的動作。
是誰要執行跑這件事,誰要執行吃這件事。
最基本的用法就講到這裡,更進階的就給後面的筆記吧!