在 C 語言中,struct 只能將資料聚合;C++ 的 類別 更進一步,將資料(成員變數)與操作資料的函式(成員函式)封裝在同一個邏輯單元中。定義類別使用關鍵字 class(或 struct,預設存取權限不同)。
class 類別名稱 {
存取標籤1:
成員宣告...
存取標籤2:
成員宣告...
};
三種存取標籤(權限標籤)控制成員可見性:
friend 函式/類別可存取。預設為 private(class 關鍵字)。friend 以及衍生類別 可存取。. 或 -> 存取。class Rectangle {
int width, height; // private 預設
public:
void set_values(int, int); // 介面
int area() { return width * height; } // 內定義,隱含 inline
};
類別名稱 vs 物件名稱: Rectangle 是型別(如 int),rect 是變數(如 a)。
複雜函式通常在類別外定義,需加上類別名稱與 :::
void Rectangle::set_values(int x, int y) {
width = x; // 可存取 private 成員
height = y;
}
:: 賦予成員正確的類別作用域,使其能像在類內一樣存取 private 成員。
Rectangle rect, rectb;
rect.set_values(3, 4);
rectb.set_values(5, 6);
cout << rect.area() << endl; // 12
cout << rectb.area() << endl; // 30
每個物件擁有獨立的 width、height,實現了「資料與操作綁定」的物件導向核心思想。
類別內定義的函式隱含 inline,編譯器可能優化為內聯展開;類外定義則視為普通成員函式。行為相同,優化機會不同。