iT邦幫忙

2025 iThome 鐵人賽

DAY 14
2
Software Development

30 天 Effective C++ 大挑戰!!系列 第 14

[Day 14] Inheritance and Object-Oriented Design I

  • 分享至 

  • xImage
  •  

第六章 —— Inheritance and Object-Oriented Design 深入探討了「繼承」在物件導向設計中的實踐和挑戰,並詳細介紹如何正確構造 class 結構以避免過度繼承,從而提高系統的可維護性和靈活性。讓我們一起努力成為 C++ 達人吧!

32. Make sure public inheritance models “is-a”

繼承是物件導向最核心的概念之一,允許使用者構建可重複使用且易於維護的程式碼,實現「多型」和「抽象」。

公共繼承表示衍生類別是基底類別的「特殊化版本」。使用公共繼承時,衍生類別必須無條件繼承基底類別的所有特性與介面。

舉例來說,我們撰寫一個名為 Student 的基底類別:

class Student {
public:
    int age;
    string school;
    string thesis;
};

衍生類別 Yoyo 繼承自 Student,並在此基礎上添加更多的特性:

class Yoyo : public Student {
public:
    int salary;
};

然而 Bob 求學期間並未發表過 thesis,故無法從 Student 公共繼承。

33. Avoid hiding inherited names

「名稱隱藏」常發生在基底類別與衍生類別定義了相同名稱重載函式。為了解決此問題,可在衍生類別使用 using Base::foo;,將基底類別的重載函式重新引入衍生類別的 scope 中。

若衍生類別僅需基底類別某一特定重載函式,可直接寫成 inline 函式。

34. Differentiate between inheritance of interface and inheritance of implementation

在公共繼承中,成員函式可分為三類。

  • Pure virtual:要求衍生類別必須實作該函式,繼承介面但無強制默認行為。
  • Virtual:提供介面以及預設實作,衍生類可選擇覆寫,但若忽略覆寫可能導致錯誤。
  • Non-virtual:強制衍生類接受介面與基類的實作,禁止覆寫以保證行為的一致性。

知識點 7 可以複習「多型」和「虛擬函式」之間的關係。


上一篇
[Day 13] 綜合大會考!! —— 期中篇
下一篇
[Day 15] Inheritance and Object-Oriented Design II
系列文
30 天 Effective C++ 大挑戰!!30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言