類與對象的概念¶
想象一下,你想造一個“機器人”來幫你處理日常事務。這個機器人需要有自己的“身體特徵”(比如名字、電量)和“行爲能力”(比如走路、說話)。在編程裏,我們把這些“身體特徵”稱爲成員變量(屬性),把“行爲能力”稱爲成員函數(方法)。而“機器人”本身,就是我們要討論的“類”的一個“實例”——也就是對象。
簡單說,類是對一類事物的抽象描述,定義了這個事物有什麼(屬性)和能做什麼(行爲);對象是根據這個描述具體創建出來的“個體”。在C++中,我們用class關鍵字來定義類,然後通過這個類創建對象,使用類裏的成員變量和成員函數。
C++中類的定義語法¶
定義一個類的基本格式如下:
class 類名 {
// 成員變量(屬性):描述對象的特徵,通常設爲private(私有),保證安全性
private:
數據類型 變量名1;
數據類型 變量名2;
// ... 其他成員變量
// 成員函數(方法):描述對象的行爲,通常設爲public(公有),供外部調用
public:
// 成員函數的聲明,比如設置變量、獲取變量、執行行爲等
返回類型 函數名1(參數列表) {
// 函數體:具體實現行爲
}
返回類型 函數名2(參數列表) {
// ...
}
// ... 其他成員函數
};
class關鍵字:用於聲明一個類。private和public:是訪問權限修飾符。private成員只能在類內部被訪問,public成員可以被類外部的代碼直接訪問。- 分號:類定義的末尾必須有分號,這是語法要求。
定義一個簡單的“學生”類¶
我們來定義一個“學生”類,讓它包含基本的學生信息和行爲。
步驟1:定義類的結構¶
假設學生有兩個核心屬性:姓名(name)和學號(id),以及兩個行爲:學習(study)和自我介紹(introduce)。
class Student {
private: // 私有成員:外部不能直接訪問,保證數據安全
string name; // 姓名(字符串類型)
int id; // 學號(整數類型)
public: // 公有成員:外部可以直接調用的函數
// 設置姓名的函數(參數:要設置的姓名)
void setName(string n) {
name = n; // 將參數賦值給成員變量name
}
// 獲取姓名的函數(返回值:當前姓名)
string getName() {
return name; // 返回成員變量name的值
}
// 設置學號的函數(參數:要設置的學號)
void setId(int i) {
id = i; // 將參數賦值給成員變量id
}
// 自我介紹函數:輸出學生的姓名和學號
void introduce() {
cout << "大家好!我叫" << name << ",學號是" << id << "。" << endl;
}
// 學習函數:輸出學生正在學習的信息
void study() {
cout << name << "正在努力學習C++!" << endl;
}
};
創建對象並使用類¶
定義完類後,我們需要創建對象(即具體的學生實例),並通過對象調用類的成員函數。
步驟2:在main函數中使用Student類¶
#include <iostream>
#include <string> // 因爲用了string類型,需要包含這個頭文件
using namespace std; // 簡化代碼,不用寫std::
int main() {
// 1. 創建一個Student類的對象,命名爲stu1
Student stu1;
// 2. 設置學生的姓名和學號(通過public成員函數)
stu1.setName("張三"); // 調用setName函數,傳入姓名
stu1.setId(2023001); // 調用setId函數,傳入學號
// 3. 調用成員函數
stu1.introduce(); // 輸出自我介紹
stu1.study(); // 輸出學習信息
return 0;
}
運行結果¶
編譯並運行上述代碼,你會看到輸出:
大家好!我叫張三,學號是2023001。
張三正在努力學習C++!
關鍵知識點總結¶
- 類的定義:用
class關鍵字,包含私有成員變量(private)和公有成員函數(public)。 - 對象創建:
類名 對象名;(如Student stu1;)。 - 成員訪問:對象通過
對象名.成員函數名()調用公有函數(如stu1.study()),成員變量通過set/get函數間接訪問(如stu1.setName())。 - 封裝思想:成員變量設爲
private,僅通過public函數訪問,避免外部直接修改數據,保證數據安全性。
通過這個簡單的例子,你已經掌握了C++類與對象的基礎:如何定義類、創建對象、調用成員函數。後續可以嘗試擴展類的功能(比如添加年齡、成績等屬性,或更多行爲),深入學習封裝、繼承等概念。