在鐵人賽中,最後一個要來介紹的章節是 Class!我覺得這是所有章節中最難懂、最抽象的部分,真的是需要花點時間搞懂,那我們就開始ㄅ!
Class 是一個新的概念,有別於以往我們所介紹的 if、for 等程序化程式設計(procedural programming),Class 屬於物件導向的程式設計(object-oriented programming),Class 其實就是 C++ 中的 Struct,因為 C 語言中的 Struct 有一些缺點,因此在 C++中就有更便利的 Class 功能發明了!
首先,我們可以根據其 visibility,可以分類出 private、public members。
private members
只能在同個 class 中被存取。
public members
可以在任何程式中被存取。
(private, public 中的 statements 可以自己按照需求定義)
(myVector 為我所建立的 class name)
Class myVector {
	private:
		int n;
		int* m;
	public:
		void init(int dim);
		void print();
Constructor 會在物件被建立時自動被呼叫,而他的名字會與 class 一樣,且不會回傳任何東西。
若我們沒有自己定義的話,編譯器會自己幫我們定義一個default constructor。
寫 constructor 時,可以放在 public 或 private 中,:
private:
	myVector();
public:
	myVector();
destructor 在物件被消滅時被呼叫。與 constructor 不同的是,他只能被放在 public 中,如果我們沒有自己定義的話系統一樣會自己定義 default destructor。若我們要自己定義的話,前面要加上~:
Public:
	~myVector();
而在 class 外,我們通常會再另外將動態記憶體釋出:
myVector::~myVector() {
	delete []m;
}
有的時候,我們想用 private member,這時候可以用 getter 與 setter 來取用這個變數:
class MyVector {
	private:
		int n;
		int* m;
	public:
		// ...
		int getN() { return n; }
		void setN(int v) { n = v; }
};
如果一個變數在所有 object 中都應該要有相同的 value 就可以運用靜態變數,其對全部的 object 都會保持不變。
可以從 instance function 中存取靜態變數,但是不能存 static function 中存取 instance member。
Class Window {
	private:
		// …
		static int barColor;
	public:
		static int getBarColor();
		static void setBarColor(int color);
		// …
}
int Window::barColor = 0; // 初始化,靜態變數要是 global variable
int Window::getBarColor() {
	return barColor;
}
void Window::setBarColor(int color) {
	barColor = color;
}
另外,當我們要取用靜態變數時,盡量用className::memberName!
Static members 還有一種使用方式是計算一物件被呼叫了幾次,我在這邊就先不細講。
最後,又要提到 pointer 了,一個 pointer 可以指向任一物件,例如,我們可以利用它來慛去一個物件的 address。
int main() {
	myVector v(5);
	myVector* ptrV = &v;
	return 0;
}
如果我們設一個物件v,而 v 中有一 instance function 叫 print(),且我們有一個 pointer ptrA 指向物件 v,我們可以寫
(*ptrA).print()
來呼叫 print() 這個函數。
如果覺得太麻煩,可以簡化成 ptrA->print() ,也就是:
int main() {
	myVector v(5);
	myVector* ptrV = &v;
	v.print();
	ptrV->print();
	return 0;
}
建立 object pointers 的陣列比建立 object 的陣列來的好也更 efficient,因此我們傾向建立存 object pointers 的陣列。
以上,差不多就告一段落啦!