# 🌳 繼承(Inheritance) --- - **學習目標:** - 認識繼承的核心觀念與用途 - 學會實作繼承的語法與運用方法 - 透過繼承設計更靈活的程式架構 --- ## 🔖 繼承的基本觀念 - 繼承允許新類別基於現有的類別建立,擁有其特性。 - 提高程式碼的重用性,減少重複實作。 </br> </br> | 名稱 | 說明 | |:------------------------- | -------------------- | | 基底類別(Base Class) | 被繼承的原有類別 | | 衍生類別(Derived Class) | 繼承基底類別的新類別 | --- ## 📌 繼承的基本語法 ```cpp class DerivedClass : public BaseClass { // 衍生類別內容 }; ``` 衍生類別自動擁有基底類別的成員函式與變數(public/protected) ---- ## 🚩 繼承範例:動物與狗 ```cpp class Animal { public: void eat() { cout << "吃東西\n"; } }; class Dog : public Animal { public: void bark() { cout << "汪汪!\n"; } }; ``` ---- ### 使用方式 ```cpp Dog dog; dog.eat(); // 從Animal繼承來 dog.bark(); // Dog自己的函式 ``` ---- ## 進階範例 1. 機具升級版、優化版 2. AI 模型擴充 --- ## 📗 存取權限與繼承 (public、protected、private) - 存取權限影響繼承後成員在衍生類別的可見度 </br> </br> | 存取層級 | 自己類別內 | 衍生類別內 | 外部程式 | | --------- | ---------- | ---------- | -------- | | private | ✔️ | ❌ | ❌ | | protected | ✔️ | ✔️ | ❌ | | public | ✔️ | ✔️ | ✔️ | --- ### 🚩 protected 的用法 ```cpp class Animal { protected: string name; public: Animal(string n) : name(n) {} }; class Dog : public Animal { public: Dog(string n) : Animal(n) {} void showName() { cout << "名字: " << name << endl; } }; ``` --- ## 📌 繼承中的建構子與解構子 - 建構順序:先父後子 - 解構順序:先子後父 ```cpp class A { public: A() { cout << "A建構\n"; } ~A() { cout << "A解構\n"; } }; class B : public A { public: B() { cout << "B建構\n"; } ~B() { cout << "B解構\n"; } }; int main() { B obj; } // 輸出: // A建構 // B建構 // B解構 // A解構 ``` --- ## 📗 函式 hiding/shallowing - 衍生類別可重新定義(覆寫)基底類別的函式 ```cpp class Animal { public: void speak() { cout << "動物叫聲\n"; } }; class Dog : public Animal { public: void speak() { cout << "汪汪!\n"; } // 覆寫函式 }; ``` ---- ### 使用方式 ```cpp Dog dog; dog.speak(); // 汪汪! ``` --- ## 🚩 多層繼承(繼承樹) ```cpp class Animal { public: void eat() { cout << "吃東西\n"; } }; class Mammal : public Animal { public: void breathe() { cout << "肺呼吸\n"; } }; class Dog : public Mammal { public: void bark() { cout << "汪汪!\n"; } }; ``` ```cpp Dog dog; dog.eat(); // Animal dog.breathe(); // Mammal dog.bark(); // Dog ``` --- ## ⚠️ 繼承時注意事項 - 使用繼承應符合「`is-a`」語意 - 避免濫用繼承,導致過度複雜 - 建議繼承層數勿過多,確保可維護性 ---- ## 進階 - 記憶體操作 - [C++ 繼承與指標位址運算實例](/AXABJd8STTaFeG4aoVFpMg) --- ## 🛠️ 課堂練習 (Lab) - 練習一: - 建立一個類別 Vehicle (車輛),設計 Car、Bike 繼承它,並各自新增專屬函式。 - 練習二: - 建立基底類別 Shape,提供計算面積函式,再衍生 Rectangle 和 Circle 類別並覆寫函式。 --- ## 💡 本週作業 - 實作員工管理系統,包含基底類別 Employee,衍生類別 Manager、Engineer,並設計基本的資料輸入輸出。 - 實作一個動物園系統,有 Animal 基底類別,Bird 和 Fish 衍生類別,各自有特有的行為函式。
{"title":"🌳 繼承(Inheritance)","description":"學習目標:","contributors":"[{\"id\":\"01487228-6720-47a9-875f-2f01b5d455ad\",\"add\":5296,\"del\":2562,\"latestUpdatedAt\":1754623416273}]"}
    71 views