Skip to content

從 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;

這兩段程式的核心概念是相近的,但表現起來是不一樣的感覺,後者將函數直接包含在物件中提供了更直觀的使用,也讓資源的傳遞更加簡易。