多態允許繼承抽象 public 介面後封裝相關型別,代價為額外間接性 (記憶體獲取、型別決策)。C++ 以類別指標/參考支援多態,此風格稱「面向物件」。
class iostream : public istream, public ostream。struct 預設 public,class 預設 private)。建議混合使用:struct 封裝資料供 C/C++ 共用,class 封裝行為 (組合模式)。struct C_Point { ... }; // C 相容結構
class Point {
public:
operator C_Point() { return _c_point; } // 隱性轉換
private:
C_Point _c_point;
};
需求:建立人員資訊鏈結串列,支援新增、刪除、顯示。採面向物件方法實作:
Personnel:編號、姓名、密碼、鏈結指標、虛擬函式 addnew()/display()。Member:Email、性別、年齡,覆寫 display()。Supermember:文件數、代碼段數,繼承 Member。PointList:管理鏈結串列 (插入、刪除、列印),存取私有鏈結指標。class Personnel {
friend class PointList;
protected:
char serial_number[15], name[10], password[15];
Personnel *pointer, *next_link;
public:
virtual void addnew() {}
virtual void display() { /* 輸出基本資料 */ }
};
class Member : public Personnel {
// ... 擴充欄位與 display()
};
class Supermember : public Member {
// ... 擴充欄位與 display()
};
class PointList {
Personnel *location;
public:
void print(); // 遍歷鏈結列印
void insert(Personnel*); // 依姓名排序插入
void delete(char*); // 依編號刪除
};
輸出三位超級會員資料,刪除第一位後再次列印,展示多態呼叫 display() 輸出各衍生類完整資訊,鏈結串列操作正確。
物件模型將相關型別透過抽象基類介面封裝,利用指標/參考實現多態。雖付出間接性代價,但獲得極大設計彈性與擴充性。本範例展示兩層繼承結構 (匿名/註冊會員 → 正式會員 → 超級/管理會員) 的實際應用。