2.8 Class 型別
在大多數物件導向(OO)的程式中, 類別(class)是最重要的基礎. 它讓程式設計師可以量身打造所需要的資料型別(data type). 以程式中最常用到的int, string來說都是由C++提供的基本類別.
在第一章中, 我們透過一個簡單的類別去處理書籍銷售的問題. 而在本節中將介紹說明類別的設計與實作.
Class的設計從操作開始
C++的class, 可以拆解成 介面(interface)和實作(implementation). 其中介面包含了這個類別必須提供的成員(包含變數與方法), 而實作則就是符合OO封裝特性的一個重要性質.
也就是說, 介面定義的方法名稱 只是宣稱它有字面上意思的功能, 而實際上它怎麼作就是程式設計師決定.
所以假如有個Animal的Class, 在interface中宣告它有move, eat, sleep等方法.
但我們知道不同動物, 吃飯睡覺走路的方法都不同. 比如狗是雜食, 羊吃草...etc
所以一個好的Class設計, 是從 .h(標頭檔)就開始設計了.
因為C++ 的class可以拆成介面(.h)跟實作(.cpp)兩個檔案來看.
所以我們在設計Class時要先了解需求是什麼, 要提供什麼功能. 因應這些功能, 所以會需要對應的資料處理.
Class主體(可以為空類別) 定義了組成該型別(Type)的資料與操作. 構成class的所有操作和資料稱為 members(成員). 而操作被稱為成員函式(member functions), 資料則被稱為成員變數(member variables或data members).
並且在Class的設計中, 會有存取限制的設計. 比如說我們希望哪些功能是外部可以使用的. 哪些功能/資料只能自己使用.
在這樣的設計下, 通常會使用 public 的存取標籤(access labels)去表示這是一個公開的成員, 任何人都可存取.使用 private 表示此為私有成員.