建構子(constructor) 建構子的英文為constructor,中文沒有統一的翻譯,通常稱為「建構子」、「建構式」、「建構元」或「建構函數」、「建構函式」…,都是在說同一個東西。 我們知道一個類別(class)內部定義了成員變數(JAVA的術語稱為成員屬性,或簡稱屬性(attribute))和成員函數(JAVA的術語稱為成員方法,或簡稱方法(method))。也就是說,類別定義了一些具體的屬性和方法,一旦類別做了實體化的動作之後(new關鍵字),就可以產生物件,這個(具體的)物件就會擁有該類別所定義的屬性、並且可以執行該類別所定義的方法。 註:此處先不討論靜態static的情況。 我們以實際的程式碼來說明,先定義一個類別:
3/16/2024物件導向的三大特性:封裝、繼承、多型 A.封裝性(Encapsulation): 封裝(Encapsulation)的概念就是在程式碼中設置權限,讓不同的物件之間有不同的存取限制,而不是把所有資料都攤在陽光下讓大家使用。「封裝」可防止程式的原始碼被竄改,保障了資料的隱密性,並提高了程式的穩定性和安全性,你總不可能希望辛苦做好發佈出去的程式,可以被使用者隨便亂改吧? 封裝的程式碼實作是透過「存/取控制修飾子」來達成的,不同的程式語言會有更細緻的分類與不同的使用方法,但我們這裡只介紹最常用的三種:public、private和protected。 封裝性的「存/取控制修飾子」: 「存/取」是兩個動作,也就是儲存和取用,但我們一般把它當作「使用」的意思就好,並直接合併在一起稱呼它為「存取」。
10/28/2023結構體(struct) 「struct」是個C語言的關鍵字(keyword,又稱保留字),為英文structure的縮寫,中文翻譯作「結構體」,簡稱「結構」,是一種「使用者自訂」的「資料型態i」,並且它是物件導向語言中「類別」(class)的前身。 C語言已經有內建short、long、int、float、double、char … 等「資料型態」,不過由於這些資料型態的變數彼此之間可能會有某種相關性,例如班級中每個學生的成績單上都會有:1.學號(字元陣列或字串型態),2.數學成績(整數型態)3.英文成績(整數型態)4.平均成績(浮點數型態),所以我們就可以說成績單就是一種結構(struct)的資料型態,因為成績單整合(綁定)了字串(在C語言是字元陣列)、整數和浮點數這三種資料型態的變數。 如同成績單的例子,結構(struct)是一種我們自訂的「資料型態」,可以更清楚地表現出變數之間的關聯性,方便我們管理與使用資料。換句話說,struct就像int、float、double、char … 一樣是種「資料型態」,只不過int、float、double、char … 是C語言內建的資料型態,而struct xxx的「xxx」是我們「自訂」的資料型態。 重點是,我們並不是自己創造一個很厲害的資料型態,例如什麼超級整數、快速浮點數、閃電字元…等,這些都是我亂掰的,我們只是「綁定」int、float、double、char … 這些基本的資料型態,成為我們自訂的資料型態。如下圖,我們使用關鍵字struct告訴C語言編譯器,我們現在開始要來做一種自訂的資料型態,我把它命名為「TestScore」來代表成績單使用的資料型態(可任意取名,但名稱要有意義才方便使用),TestScore這種資料型態綁定了char、int、float這三種資料型態(的變數),術語稱為:「TestScore是一種結構化的資料型態(data type)」。 註:習慣上(約定俗成),對於自訂的資料型態名稱,開頭首個字母會使用大寫以示區別,例如這裡的TestScore。它也融合了駝峰式命名法,和「Test_score」是同樣意思。
8/7/2023函數中資料的傳遞:傳值、傳址、傳參考 以下的說明是每種程式語言都通用的觀念,但不同程式語言有不同的語法,以及不同的程式語言不一定都支援全部的傳遞方式,要看你使用的是哪種程式語言。 把資料輸入到函數中進行運算,在程式語言中有個專業的術語叫做「傳遞」(pass)。例如函數Y(x) = 3x + 1,若我們設定x = 2,則把x = 2丟進去Y(x)函數中做運算,術語就稱為傳遞,而Y(x)函數輸出的結果是7,數學式寫作Y(2) = 7,應該很容易理解。 另外,關於函數的「引數」與「參數」,這兩個重要觀念很多人說不清楚,可能連程式經驗豐富的人都還是對它們的區別一知半解。但這是很重要的觀念,必須要徹底理解,我有信心這篇文章應該是你看過最清楚的解說了。 所以,在解說函數傳遞的三種方式之前,先釐清一下何謂函數的引數和參數。 函數的引數(argument) v.s. 函數的參數(parameter) 在使用函數(或稱函式或副程式)時,往往會遇到這兩個名詞,時常造成混淆,每人翻譯的也不盡相同,但由於非常重要,必須做好釐清。
8/3/2023or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up