真正的物件,要有狀態和行為間的連動。狀態以資料的形式儲存在物件的屬性上,行為則是透過函式來實作。C 語言並沒有真正的物件,只能撰寫在精神上貼近物件的函式。在本文中,我們會以平面座標中的點為例,展示兩種物件的寫法。 繼續閱讀
在本系列文章中,我們假定讀者已經學完 C 語言的語法,準備要用 C 寫程式。此系列包括以下內容:
- 建立 C 專案
- 處理 C 程式相依性
- 處理跨平台議題
- 優化 C 程式
- 撰寫物件 C 程式
- 撰寫函數 C 程式
- 撰寫泛型 C 程式
- 錯誤處理
- 撰寫測試程式
由於這些內容不是語法的一部分,沒有標準答案,只能算是目前可行的方式。讀者除了閱讀這些文章,最好再閱讀其他資料,並實際動手寫 C 程式,才能達到最佳的學習效果。
如果讀者想要複習 C 語法,可以觀看筆者先前寫的文章。
若物件有進行封裝,除了透過公開介面外,我們無法更動該物件內部的狀態。C 語言不強調封裝的概念,所以我們要重新思考封裝在程式碼中的意義。封裝的目的是資訊隱藏,也就是說,只提供最少量的必要資訊,其他的部分則不開放給外部程式。 繼續閱讀
C 語言無法從語法上直接獲得繼承這項特性,所以我們要將繼承從表面上的意義抽離,思考繼承在程式碼的本質。基本上,繼承是一種共用程式碼及實踐子類型的方式。雖然 C 沒有繼承的語法,但我們可以用物件組合來達到程式碼重用以及模擬繼承的目的。 繼續閱讀
基本上,C 缺乏對多型的直接支援,要用一些方法去模擬。在本文中,我們使用函式指標的方式去模擬多型。 繼續閱讀
由於 C 不直接支援多型,我們要用一些手法來模擬。在上一篇文章中,我們使用函式指標,在本文中,我們使用聯合 (union) 來模擬多型。 繼續閱讀
C 語言不是函數式語言,但仍有少數函數式程式的特性。本文中介紹一些在 C 語言中可見的函數式程式特性,這些寫法不是主流的手法,故僅供參考。 繼續閱讀
撰寫 C 程式時,我們可以用 void 指標來模擬泛型;不過,這樣寫雖然有泛型的效果,但失去了型別安全;因此,請謹慎使用。 繼續閱讀
用前置處理器來模擬泛型可以跳脫指標型別的限制,但卻是非主流,因為沒有型別安全且難以除錯。這已經算是一種經典反模式,讀者請自己決定要不要使用這個手法。 繼續閱讀
在 C11 之前,C 語言缺乏真正的泛型,雖然可以用一些語法特性來模擬泛型,但那些手法缺乏型別安全。在 C11 後,透過泛型型別巨集可取得具有型別安全的泛型。 繼續閱讀
其實泛型程式是一種模板 (template) 的概念。對於 C、Go (golang) 等不支援泛型的程式語言來說,也可以用外部模板來模擬泛型。本文以一個 C 語言的實例來說明如何以外部模板模擬泛型程式。 繼續閱讀