發表文章

C++ 進階 教學: 目錄

圖片
C++ 進階 教學: 目錄 ( 回 CPP Road ) 好的頻道需要你的支持 ,謝謝你使用Youtube影片的 超級感謝 功能給我們鼓勵。 學會 指標 ,才是真正學會 C/C++。基礎語法每種語言都差不多,C/C++ 的特色在於可以用指標 控制記憶體的配置及釋放 。可惜的是,無論是學校或補習班,在基礎語法部份雖然沒有辦法做太多範例及邏輯的教學,語法上還是可以教的很清楚;但礙於時間有限,從指標開始,便沒有辦法講的太詳細。而 指標不夠熟就會影響後面物件導向的學習 。也就是說,很多同學在學完陣列存取後,C/C++ 之旅就算結束了。 希望 深度學習 C/C++?你的 C/C++ 之旅剛要開始。 回首前塵 : C++ 入門 許老師的回答: 什麼是APCS ? 想用申請入學進入大學資訊相關科系是不是一定要考 APCS ? 第一次學程式設計,學什麼語言比較好? 用APCS成績申請大學的技巧 好的頻道需要你的支持 ,謝謝你使用Youtube影片的 超級感謝 功能給我們鼓勵。 安裝與執行 Eclipse CDT (C/C++ Development Tooling)  2024/09 更新 一維陣列   多維陣列 函式 (Function) 與標頭檔 指標 (Pointer) 參考 (Reference) 結構 (struct) 與函式導向 (程序導向) 使用 C/C++ 標準函式庫中的 time.h 做日期時間的運算 物件導向的基本觀念 C 與 C++ 的字串運算 物件導向的進階觀念 - 封裝與繼承 物件導向的深入觀念 - 多型與虛擬函式 檔案存取與資料管理 謝謝大家對於CPP Road的支持。關於 C++ 入門與進階語法的教學。到這邊告一個段落。能夠學到這一邊的同學,如果還需要更進階的主題。基本上,應該有能力自行透過書籍或者是網路上的其他文章來進修。就不需要由我這邊再另外錄製影片。 若是希望對物件導向能有更深入了解,尤其是多型的實務應用。建議你觀看我的另一個教學頻道 Java Road 中的 Java Professional 影片。雖然是不同語法,但對己學會 C/C++ 的人, Java 語法其實很快可以上手。而用 Java 教完整的多型實務應用,是因為 Java 語法中,除了類別還有介面,加上 static 的

C++ 進階 教學 : 檔案存取與資料管理

圖片
好的頻道需要你的支持 ,謝謝你使用Youtube影片的 超級感謝 功能給我們鼓勵。 影片1 檔案的輸入輸出是一定要會的 影片2 一次讀入大量資料或以行為單位讀入資料 影片3 輸出資料到檔案時要注意是覆蓋還是串接 影片4 大量資料的管理不要再用陣列了,要會使用 API 來協助運算 影片5 還沒學演算法? 沒關係,先讓 API 幫你忙 (發布時間 6 月 4 日 AM 09:30) 範例 好的頻道需要你的支持 ,謝謝你使用Youtube影片的 超級感謝 功能給我們鼓勵。   這一個單元。會是這個 “CPP Road - C++ 進階教學” 部落格的最後一個單元。接下來,影片錄製的重點會轉入( 基礎資料結構與演算法 (APCS) ):基礎 資料結構 與 演算法 教學以及常用的 解決問題的技巧 。基本上是目前 APCS 測驗的重點。   很多同學希望可以在這裡學到,資料結構跟演算法的相關課程。因為目前網路上比較少看到這一類講義或影片。而補習班也一般都沒有開這個課程。類似課程只能在大學的資訊相關科系裡面才能學到。而事實上,在大學裡面所教的也都是以理論為主,包含說如何去證明哪一個演算法是否有效。並沒有太多的相關程式碼設計的教學。所以為了讓同學能夠學會這一些的技巧。所以我決定把教學重點轉往這個角度來錄製影片。   不需要參加APCS測驗的同學。是否有必要看後面的教學影片呢?我會建議你還是要看。畢竟,日後你進了職場。你要競爭的對象就是那一群學過資料結構跟演算法的學生。如果你一點概念都沒有,就很難跟他們競爭。這也是我為什麼要轉往那個角度去錄製影片的原因。基本上 C++ 語法你學到這一邊。其他什麼語法你都可以學了。你去學其他語法都會覺得很輕鬆,因為都大同小異。就像你會開車了,什麼廠牌的車你都可以開。但是資料結構、演算法與解決問題的技巧,這一些東西沒有人帶你入門,沒有人教你,想自學要用很多時間,觀念還不一定對。   所以還是建議要看後面的影片。雖然只是基礎教學。但是你基礎打好了,如果有用到更深入的。你要學那些深入的也比較容易。   另外,若是同學希望可以學到更深入的物件導向的觀念。包含:多型的應用、介面等等。那麼建議你去看我 Java Professional 部落格。部落格中有深入的討論物件導向的觀念。那一塊是C語言沒有,但要身為一個高階

C++ 進階 教學 : 物件導向的深入觀念 -多型與虛擬函式

圖片
好的頻道需要你的支持 ,謝謝你使用Youtube影片的 超級感謝 功能給我們鼓勵。 影片1 多型是什麼? 用來做什麼? 影片2 什麼是 is - a ? 跟 has - a 有什麼區別 ? 影片3 用 Eclipse 簡化新增類別的流程與建立可以用來測試多型的程式框架 影片4 多型從指派開始,將子類別物件指派給父類別宣告的指標、參考、集合與參數 影片5 用父類別的指標或參考呼叫父類別宣告的成員函式時,執行的是父類別中定義的內容 影片6 C++ 的多型就是要用虛擬函式,不是虛擬函式就不是 Override,就沒有多型 影片7 虛擬函式很重要嗎? 為麼多型沒有它就不行? 影片8 強迫子類別 Override 的機制 - 純虛擬函式 範例 好的頻道需要你的支持 ,謝謝你使用Youtube影片的 超級感謝 功能給我們鼓勵。 多型與虛擬函式    多型的應用是物件導向的深入觀念,要理解本章的內容。建議同學不只是要先看懂前面物件導向基本觀念與繼承的相關內容,而且要熟練。尤其要確實理解關於類別、物件與名稱的關係。     多型的實作,指的是 父類別宣告的指標或參考,可以控制所有子類別物件的能力 。也就是說:父類別宣告的指標或參考,可以代表任何子類別物件。     Q. 多型的目的? A. 以父類別宣告的指標或參考呼叫成員函式, 會因為指派的物件不同而有不同的執行結果 。可以避免不必要的 Overload 。   Q. 什麼是 is-a ? A. 用來描述類別與類別的關係。 子類別 is-a 父類別 。繼承了就是了。 例:無線光學滑鼠 is-a 光學滑鼠 is-a 滑鼠 is-a 電腦周 邊 is-a 電子設備。 而因為子類別 is-a 父類別,所以一個 型別為子類別型別的物件,也是型別為父類別型別的物件 。   Q. 物件多型? A. 只要是物件就一定有型別。而且會有多種型別。而這多種型別之間,必定有父子型別的關係 。 例 1 : 有父子關係的型別:電子設備 -> 電話 -> 行動電話 -> 智慧型手機。 物件:你身上的手機。   你身上的手機是一個物件,是一個型別為智慧型手機的物件,也是一個型別為行動電話的物件

程式初學者 - 你是要學程式語言還是程式設計

圖片
    許老師給程式設計初學者的建議   常常有同學問我:「老師,我想要學程式,你建議先學什麼語言?」。其實,大部份想跨足程式設計領域的初學者,都不清楚 學程式設計 與 學程式語言 是兩回事。     學程式就像學開車一樣。假設你的教練車是一台超級跑車,你是要 利用這一台車學會開任何車都有用到的基本技術 還是要學 如何開這一台跑車 。目標是學開車基本技術的人,學習的重點就是如何轉彎、停車等 各種開車的基本技術 。目標是學開這一台跑車的人,學習重點是換檔時機、加速方式、高速過彎等各種讓這一台車的 性能發揮到極致的理論 。   所以,你要先確認自己現在是要學任何語言都要用到的 程式設計的基本觀念與技巧 ,或是要學某一種 程式語言的細節 。如果你現在是要學程式設計的基本觀念與技巧,那麼用什麼語言就不是重點。就像上一段講的學開車,如果只是要學基本開車技術,用什麼車當教練車,其實都可以。    但是,我還是必須建議同學,不要用  Python 或 Java Script 等容易上手的語言學程式設計的基本觀念與技巧。因為那就像用自駕車學開車一樣,有很多基本的觀念及技巧學不到,這輩子就只能開自駕車,要開其它車,還是得從頭學起。Java Script 是語法格式上比較寬鬆的語言,也就是說你不按照語法寫也會對,容易養成不好的撰寫習慣。Python 是比較高階的語言,把一些語言中常用的基本動作省略掉,相對的那些基本觀念就學不到。   基本上建議用 Java 或 C/C++ 這種比較傳統的語言入門,能夠學到比較完整的基本觀念。不過一定要記得, 不是去專研語言的細節 ,只是 借用這語言來學程式設計的基本觀念與技巧 。等你程式設計的基本觀念與技巧學完了、練熟了,再回頭去研究語言的細節。例如 C / C++  的 指標、參考、物件導向 或是 Java 的 物件導向與 API 的應用 。若是你 Java 或 C / C++ 會了,再去學Python 或 Java Script 或是 C# 等其他語言,基本上就像己經會開車的人上了自駕車一樣,很快就會了。    講了半天,那到底什麼是程式設計的基本觀念與技巧呢?   程式的開發是針對要解決的問題,用程式語言依照正確的邏輯撰寫程式碼。真正重要的是 程式設計的能力 ,也就是 思考問題的解決方案,並把思考邏輯轉換為程式邏輯的能力 。最後才是 用程式語言把

申請入學—大學資訊相關科系

圖片
 許老師給想進入大學資訊相關科系高中生的建議   APCS 為 Advanced Placement Computer Science 的英文縮寫,是指「大學程式設計先修檢測」,檢驗具備程式設計能力之高中職學生的學習成果,提供大學作為選才的參考依據。並藉由本檢測之推動,除了讓高中職重視資訊科學課程的學習外,亦讓大學酌訂抵免程式設計學分的相關措施。   透過參與 APCS 測驗,替有程式設計能力的人才,提供了另一個申請大學資訊相關科系的選項。從 111 學年度開始,大學入學管道有三個: 個人申請入學 、繁星推薦與分發入學(分科測驗)。在個人申請的部份,每位同學可以依照自己的學測成績與興趣選擇多個大學校系申請入學。而各大學的申請入學分成 一般校系 與  APCS 校系 兩種。APCS 校系除了有一般科目的標準,也會有 APCS 測驗成績的標準。 以 110學年度成功大學 (目前對APCS要求最高)為例 APCS 校系的資訊工程學系的科目要求是: 英文->均標;數學->前標;APCS 觀念題 5 級分;APCS 實作題 4 級分。 招生名額 2 人。 一般校系的資訊工程學系的科目要求是: 國文->均標;英文->均標;數學->前標;自然->前標;招生名額 56 人。   很多同學誤以為 APCS 測驗成績只能用在申請 APCS 校系,其實不儘然。若 APCS 測驗成績符合要申請學校的 APCS 校系標準,申請 APCS 校系當然是合理的。但若你一般科目的成績有符合要申請學校的一般校系,無論你 APCS 的成績是否符合該校系的 APCS 標準,你都可以申請一般校系(名額較多)並把  APCS 的成績作為申請一般校系 的 "課程學習成果"與 "多元表現"的採參資料 。相對於其他沒有參加 APCS 測驗的同學,你的上榜機會自然大大提升。   同理,若你 報名的科系與程式設計有搭上邊 的如電機、電子等,你有 APCS 的成績與其他沒有 APCS 成績的同學比較起來,自然也是大佔上風。   決定要考 APCS 了嗎?相信你有注意到,一般科目並不能放掉。大部份大學的招生標準除了 APCS 成績要達標之外,也會有其他科目的要求。    也就是說,身為高中生,在本身的課業就己經很繁重的狀況下,你還要另外擠時間出來練習程式設計。

C++ 進階 教學 : 物件導向的進階觀念 - 封裝與繼承

圖片
C++ 進階 教學 : 物件導向的進階觀念 - 封裝與繼承 好的頻道需要你的支持 ,謝謝你使用Youtube影片的 超級感謝 功能給我們鼓勵。 影片1 什麼是封裝? 為什麼要封裝? 影片2 使用 private 與 public 實作一個嚴謹的封裝 影片3 什麼是繼承? 為什麼要繼承? protected 的介紹 影片4 子類別中應該作和不要作的事 與 protected的真正用法 影片5 什麼是建構函式?為什麼要寫建構函式?預設的建構函式是怎樣? 影片6 this 到底是指向類別還是物件? 要怎麼用? 使用時機為何? 與 建構函式的 Overloading 範例 好的頻道需要你的支持 ,謝謝你使用Youtube影片的 超級感謝 功能給我們鼓勵。 封裝 物件導向中用來實作 資訊隱藏 的機制,確保物件的 安全 。其作法為:隱藏不想讓外界碰觸的成員,只公開接受外界存取的成員。 一般而言,類別開發者為了物件的安全,會把 資料成員 全部 隱藏 起來,只 公開 存取或運算資料成員的 函式成員 。讓物件 資料的修改 ,完全 由函式成員掌控其值的變化 ,避免物件產生預期外的值。 成員存取的控制以 存取修飾詞 宣告的 段落 為單位。在宣告某一個存取修飾詞之後,另一個存取修飾詞出現之前為一個段落。若都沒有宣告,預設為 private 。 存取修飾詞: private 只允許本類別中的其他成員存取。 protected 允許本類別的子類別存取。 public 允許所有類別存取。(用範例解釋存取) 從開始學物件導向起,一直向同學強調要有 開發者 與 使用者 的觀念。存取限制,是 開發者用來限制使用者的存取權限 。 當你在開發一個類別的時候(假設為類別A),你是類別A的開發者。在類別A中你有用到(存取)另一個類別的時候(假設為類別B),你是類別B的使用者。也就是說,在寫程式的時候,你大部份是身兼開發者與使用者的角色,所以容易混淆。 類別使用者使用類別的方式有二種: 物件 與 繼承 。 我們在開發的類別中用到 string 類別的時候,我們就是 string 類別的使用者。而我們是怎麼使用 string 類別呢?我們是 建了 string 的物件 ,然後用 物件儲存資料 ,再呼叫 成員函式運算資料 。這就是 以物件方式使用類別

C++ 進階 教學 : C 與 C++ 的字串運算

圖片
C++ 進階 教學 : C 與 C++ 的字串運算 好的頻道需要你的支持 ,謝謝你使用Youtube影片的 超級感謝 功能給我們鼓勵。 影片1 字元陣列與字元指標的宣告 影片2 char * 參數與返迴型別的應用與函式 strcpy 介紹 影片3 void * 參數與返迴型別的應用與函式 memcpy 介紹 影片4 const char * 返迴型別的應用與函式 strcat, strcmp, strstr 及 strtok 介紹 影片5 用 C 寫範例 - 字元數量統計 影片6 用 C 寫範例 - 登入 影片7 用 C 寫範例 - 身份證字號檢測 影片8 string 物件變數與物件指標 影片9 string 物件的成員函式(一) - 字串的指派與串接 影片10 string 物件的成員函式(二) - 字串的插入、刪除、取代與搜尋 影片11 string 物件的成員函式(三) - 將字串依指定內容切割後置入陣列 影片12 string 物件的成員函式(四) - 字串的比對與字串陣列的排序 影片13 string 標頭檔中與字串運算相關的函式 影片14 用 C++ 寫範例 - 字元數量統計 影片15 用 C++ 寫範例 - 登入 影片16 用 C++ 寫範例 - 身份證字號檢測(一) 影片17 用 C++ 寫範例 - 身份證字號檢測(二) 範例 好的頻道需要你的支持 ,謝謝你使用Youtube影片的 超級感謝 功能給我們鼓勵。 字串 字元串列 。也就是大量字元的集合。在 C 語言時期以 字元陣列 或 字元指標 來做為字串型別,在 C++ 文件中常以 C-style string 稱之。在 C++ 時期採用 string 類別為字串型別。 字元陣列與字元指標 宣告字元陣列 char name[length + 1]; 字元陣列最後一個元素必須為 空字元 ,其字元碼為 0 ,代碼為 NUL。 c