【簡報】蘇西
【講師】children
可能是?或是看蘇西有沒有來得及回學校
Class 是什麼?
假設你今天要寫一個遊戲,
遊戲裡面有很多角色,
每個角色都有等級、血量、攻擊力等資料。
有什麼方法,可以讓我們寫起來輕鬆一點嗎?
絕對沒有偷PY放學簡報喔
反正我自己偷自己沒毛病吧
用 Class
Class 是什麼?
可以把 class 想成一個餅乾模型,你就可以用那個模型製作很多餅乾,每個餅乾都具有某些屬性。
一個餅乾稱之為一個「物件」(Object)
Class 是什麼?
例子:
Class
角色模板
屬性 1: 名稱
屬性 2: 血量
屬性 3: 等級
名稱= 忍者
血量=100
等級=5
名稱= 超人
血量=90
等級=10
名稱= 玩家
血量=20
等級=1
Object
Object
Object
C++ Class 語法
Class 怎麼寫
class ClassName { //宣告 class 的名稱
public/private/protected: // 指定接下來內容的存取範圍是否公開
variables; // 宣告會用到的變數
functions(){} // 宣告會用到的函式
};
// 一個 class 裡面可以同時有 public/private/protected 多個部分
// 下一頁看範例ClassName ObjectName;
ClassNamr ObjectName;宣告 Class (類別)
宣告 Object (物件)
Class 怎麼寫
#include <iostream>
#include <string>
using namespace std;
// 定義一個類別名為 'Person'
class Person {
public:
// 會用到的變數
string name;
int age;
// 成員函式「自我介紹」
void introduce()
{
cout << 你好,我的名字是 " << name << " 。我 "
<< age << " 歲" << endl;
}
};
Class 怎麼寫
int main()
{
// 建立一個 Person 類別的物件
Person Suzy;
// 設定他的變數
Suzy.name = "Suzy";
Suzy.age = 16;
// 呼叫 introduce() 成員函式
Suzy.introduce();
return 0;
}Public / Private / Protected
你可以寫一個 public 的函式,在裡面裝private 的函式
等下說,先假裝沒看到
下一頁看範例!
Public / Private / Protected
#include <iostream>
using namespace std;
class Base {
public:
// public , 可於 class 外部直接存取
void publicMethod() {
cout << "This is a public method." << endl;
}
private:
// private , 僅於 class 內部存取
void privateMethod() {
cout << "This is a private method." << endl;
}
public:
// 弄一個public 函數存取 private 成員
void accessPrivateMethod() {
privateMethod();
}
};Public / Private / Protected
int main() {
Base baseObj;
// 測試 public 成員
baseObj.publicMethod(); // 可直接存取
// 測試 private 成員
// baseObj.privateMethod(); // 無法直接存取, 會導致編譯錯誤
baseObj.accessPrivateMethod(); // 透過 public 方法間接存取
return 0;
}
Derived Class (衍生類別 / 子類別)
「繼承」是物件導向程式設計中一個重要也是核心的觀念,動詞原文為 inherit 。這裡的意思中文用「遺傳」比較恰當,子代會從親代遺傳一些特性。
「物件導向」的概念後面會介紹
總之:
Subclass =Derived Class (衍生類別/子類別) 會繼承Base Class (父類別) 的所有變數及成員函式
Derived Class (衍生類別 / 子類別)
語法
class DerivedClass : public BaseClass{
// members....
// member function
}注意這個是寫在 int main () 上面喔,不是裡面
Derived Class (衍生類別 / 子類別)
應用:
寫一個 Base Class 介紹人,和 Subclass 拿來裝不同種類的人(例:老師、學生等)以便依照不同子類別的需求紀錄不同變數
#include <iostream>
#include <string>
using namespace std;
// Base Class: Person (父類別)
class Person {
protected:
string name;
int age;
void displayBaseInfo() const {
cout << "姓名: " << name << endl;
cout << "年齡: " << age << endl;
}
};
Derived Class (衍生類別 / 子類別)
// Subclass 1: Student (學生)
class Student : public Person {
public: // 變數設為 public
string studentID; // 學生獨有的變數
void displayInfo() const {
cout << "--- 學生資訊 ---" << endl;
displayBaseInfo();
cout << "學號: " << studentID << endl;
}
};
// Subclass 2: Teacher (老師)
class Teacher : public Person {
public:
string subject; // 老師獨有的變數
void displayInfo() const {
cout << "--- 老師資訊 ---" << endl;
displayBaseInfo();
cout << "教學科目: " << subject << endl;
}
};
Derived Class (衍生類別 / 子類別)
int main() {
Teacher lee;
lee.name = "李老師";
lee.age = 30;
lee.subject = "物理";
lee.displayInfo();
cout << endl;
Student Suzy;
Suzy.name = "Suzy";
Suzy.age = 16;
Suzy.studentID = "111222";
Suzy.displayInfo();
return 0;
}C++ Structure 語法
Structure(又稱 Struct),英翻中則為結構(體),是一種用來整合不同資料型態的自訂資料型態,讓我們能夠更方便地管理和使用相關的變數。
總之,結構體可讓我們把多個不同型態的變數(如 int、char、float 等)放在一起,形成一個集合。 可以視為「輕量版」的 class
Structure 怎麼寫
#include <iostream>
#include <string>
using namespace std;
struct Student {
int id; // 學號
string name; // 姓名
int age; // 年齡
};
int main() {
Student student1; // 宣告 Student 結構體變數
student1.id = 12345;
student1.name = "Suzy";
student1.age = 16;
// 輸出學生資料
cout << "ID: " << student1.id << endl;
cout << "Name: " << student1.name << endl;
cout << "Age: " << student1.age << endl;
return 0;
}宣告 Struct
在 main () 裡使用它
Structure 怎麼寫
#include <iostream>
#include <string> // 包含 <string> 才能使用 std::string
using namespace std;
void printBook(Books book); // 函式原型:使用 Books 結構體作為參數
// 宣告一個結構體型態 Book
struct Books
{
// 將 char 陣列替換為 std::string
string title; // 書標題
string author; // 書作者
string subject; // 書類目
int book_id; // 書 ID
};範例
int main()
{
Books Book1; // 定義結構體型態 Books 的變數 Book1
Books Book2; // 定義結構體型態 Books 的變數 Book2
// Book1 詳述
Book1.title = "C++ 教學"; // 原本使用 strcpy
Book1.author = "Runoob"; // 原本使用 strcpy
Book1.subject = "程式語言"; // 原本使用 strcpy
Book1.book_id = 12345;
// Book2 詳述
Book2.title = "CSS 教學"; // 原本使用 strcpy
Book2.author = "Runoob"; // 原本使用 strcpy
Book2.subject = "前端技術"; // 原本使用 strcpy
Book2.book_id = 12346;
// 輸出 Book1 訊息
printBook(Book1);
cout << endl; // 增加空行
// 輸出 Book2 訊息
printBook(Book2);
return 0;
}
// 函式定義
void printBook(Books book)
{
cout << "書標題 : " << book.title << endl;
cout << "書作者 : " << book.author << endl;
cout << "書類目 : " << book.subject << endl;
cout << "書 ID : " << book.book_id << endl;
}小實作
用 class 或是 struct
寫一份程式碼可以
1. 建立數個「銀行帳號」
2. 銀行帳號應該包含提款、存款、匯款給另一個銀行帳號的函式
參考資料
這個講的有更深一點,有興趣歡迎自行閱讀
或是你有想到更酷的應用我也不反對