C++ 類別與物件:初學者指南
你好,未來的C++大師!很高興能夠成為你在這個令人興奮的C++類別與物件世界之旅中的嚮導。作為一個教程序設計多年的老師,我可以告訴你,這個主題就像學習用樂高積木建造一樣 - 一旦你掌握了要領,你將會在短時間內創造出驚人的事物!
什麼是類別和物件?
在我們深入細節之前,讓我們從一個簡單的類比開始。想象一下你正在描述一輛車。車有某些特徵(顏色、型號、年份)並能夠執行某些動作(啟動、停止、加速)。在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;
}
};
讓我們來解析一下:
- 我們定義了一個名為
Car
的類別。 - 在類別內部,我們有數據成員(
color
、model
、year
)和成員函數(start()
、stop()
)。 -
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++中,類別通常有兩個主要部分:
- 私有成員:這些只能在類別內部訪問。
- 公開成員:這些可以從類別外部訪問。
以下是我們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;
}
}
};
這個版本引進了幾個新的概念:
- 私有成員:我們將我們的數據成員設為私有以實現更好的封裝。
- 建構子:這個特殊的函數在創建物件時被調用,用於初始化其值。
- 取值方法:這些允許控制訪問我們的私有數據成員。
-
改進的方法:我們的
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