C++ 類別與物件:初學者指南

你好,未來的C++大師!很高興能夠成為你在這個令人興奮的C++類別與物件世界之旅中的嚮導。作為一個教程序設計多年的老師,我可以告訴你,這個主題就像學習用樂高積木建造一樣 - 一旦你掌握了要領,你將會在短時間內創造出驚人的事物!

C++ Classes & Objects

什麼是類別和物件?

在我們深入細節之前,讓我們從一個簡單的類比開始。想象一下你正在描述一輛車。車有某些特徵(顏色、型號、年份)並能夠執行某些動作(啟動、停止、加速)。在C++中,類別就像是車的藍圖,定義了所有車應該具有的屬性和動作。那麼,物件就是根據該藍圖建造的特定車輛。

現在,讓我們親自動手編寫一些代碼吧!

C++ 類別定義

在C++中,我們使用class關鍵字來定義一個類別。以下是一個基本的結構:

class Car {
// 類別成員在這裡
};

但這只是一個空的車庫!讓我們來添加一些細節:

class Car {
public:
string color;
string model;
int year;

void start() {
cout << "The car is starting!" << endl;
}

void stop() {
cout << "The car is stopping!" << endl;
}
};

讓我們來解析一下:

  1. 我們定義了一個名為Car的類別。
  2. 在類別內部,我們有數據成員(colormodelyear)和成員函數(start()stop())。
  3. public關鍵字意味著這些成員可以從類別外部訪問。

定義C++物件

現在我們有了我們的車輛藍圖,讓我們來創造一些實際的車輛!這裡就需要用到物件了:

int main() {
Car myCar;  // 創建一個Car類別的物件
Car yourCar;  // 創建另一個Car類別的物件

return 0;
}

恭喜你!你剛剛"製造"了兩輛車。但它們現在還相當平淡無奇 - 讓我們給它們一些個性!

訪問數據成員

要設置或獲取我們車輛屬性的值,我們使用點(.)運算符:

int main() {
Car myCar;

// 設置值
myCar.color = "Red";
myCar.model = "Sportster";
myCar.year = 2023;

// 獲取值
cout << "My car is a " << myCar.color << " " << myCar.model << " from " << myCar.year << endl;

// 呼叫成員函數
myCar.start();
myCar.stop();

return 0;
}

輸出:

My car is a Red Sportster from 2023
The car is starting!
The car is stopping!

看我們是如何與myCar物件互動的?我們設置它的顏色、型號和年份,然後打印這些值,最後調用它的成員函數。

類別與物件的詳細信息

現在我們已經掌握了基礎知識,讓我們更深入一點。在C++中,類別通常有兩個主要部分:

  1. 私有成員:這些只能在類別內部訪問。
  2. 公開成員:這些可以從類別外部訪問。

以下是我們Car類別的改進版本:

class Car {
private:
string color;
string model;
int year;
bool isRunning;

public:
// 建構子
Car(string c, string m, int y) {
color = c;
model = m;
year = y;
isRunning = false;
}

// 取值方法
string getColor() { return color; }
string getModel() { return model; }
int getYear() { return year; }

// 其他方法
void start() {
if (!isRunning) {
isRunning = true;
cout << "The " << color << " " << model << " is starting!" << endl;
} else {
cout << "The car is already running!" << endl;
}
}

void stop() {
if (isRunning) {
isRunning = false;
cout << "The " << color << " " << model << " is stopping!" << endl;
} else {
cout << "The car is already stopped!" << endl;
}
}
};

這個版本引進了幾個新的概念:

  1. 私有成員:我們將我們的數據成員設為私有以實現更好的封裝。
  2. 建構子:這個特殊的函數在創建物件時被調用,用於初始化其值。
  3. 取值方法:這些允許控制訪問我們的私有數據成員。
  4. 改進的方法:我們的start()stop()方法現在在執行動作前會檢查車輛的狀態。

讓我們看看我們如何使用這個改進的類別:

int main() {
Car myCar("Red", "Sportster", 2023);

cout << "My car is a " << myCar.getColor() << " " << myCar.getModel()
<< " from " << myCar.getYear() << endl;

myCar.start();
myCar.start();  // 再次嘗試啟動
myCar.stop();
myCar.stop();  // 再次嘗試停止

return 0;
}

輸出:

My car is a Red Sportster from 2023
The Red Sportster is starting!
The car is already running!
The Red Sportster is stopping!
The car is already stopped!

這不是很有趣嗎?我們的車現在更像是一輛真實的車 - 它不能在已經運行的情況下再次啟動,也不能在已經停止的情況下再次停止。

方法表格

以下是一個表格,總結了我們改進的Car類別中的方法:

方法 描述
Car(string c, string m, int y) 建構子:初始化新的Car物件
string getColor() 返回車輛的顏色
string getModel() 返回車輛的型號
int getYear() 返回車輛的年份
void start() 如果車輛尚未運行,則啟動車輛
void stop() 如果車輛正在運行,則停止車輛

就是這樣!你剛剛建立了你的第一個C++類別,並從中創建了物件。記住,練習成就完美,所以不要害怕實驗你自己的類別和物件。也許可以嘗試創建一個Garage類別,它可以存儲多個Car物件?

繼續編碼,繼續學習,最重要的是,玩得開心!在你意識到之前,你將會是那個教導別人關於C++類別和物件奇蹟的人。下次再見,編碼愉快!

Credits: Image by storyset