Appearance
從 C 到 C++
在 C 語言的文章中,已經介紹了 C 的 struct 語法,並第一次引入了「物件」的概念,在 C++ 中,許多新的特性與設計就是圍繞著物件運作的。
複習 struct
在 C 語言中,struct 只是為了讓複雜的數據與類別有一個方便的包裝,而不是四散在各處,如果將這種物件傳遞給函數,他能夠自由修改裡面的數值,這其實難以追蹤,在數據出錯時需要看在各個檔案中的相關函數,大大增加了 debug 的難度。
class 簡介
在 C++ 中,物件 (包括 struct 和 class) 加入了不少方便使用的功能,其中原生支援的功能就有,這些功能又衍伸出了許多更進階的功能,本章會提及部分基礎的概念。
- 物件內函數
- 訪問規範
- 繼承
struct 與 class 的主要差異是訪問規範,參見
函數
以往在 C 語言中物件與函數是分開的,這導致了追蹤相對困難,C++ 則允許物間中定義函數。
c
// C
typedef struct Person {
int weight;
} Person;
void eat(Person* someone, int food_weight) {
someone->weight += food_weight;
}
Person Amy = {0};
eat(&Amy, 10);
printf("%d", Amy.weight);c
// C++
class Person{
public:
int weight;
void eat(int food_weight) {
weight += food_weight;
}
};
Person Amy = {0};
Amy.eat(10);
std::cout << Amy.weight;這兩段程式的核心概念是相近的,但表現起來是不一樣的感覺,後者將函數直接包含在物件中提供了更直觀的使用,也讓資源的傳遞更加簡易。