首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

深度探索 C++ 物件模型 (3):多態、結構與類別差異、物件模型設計實戰

     編輯:關於C++

多態的代價與機制

多態允許繼承抽象 public 介面後封裝相關型別,代價為額外間接性 (記憶體獲取、型別決策)。C++ 以類別指標/參考支援多態,此風格稱「面向物件」。

常見問題解答

  1. C++ 支援多重繼承嗎? 支援 (Java/C# 不支援)。典型範例:class iostream : public istream, public ostream。
  2. 結構與類別差異? 技術上無差異,唯預設存取權不同 (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() 輸出各衍生類完整資訊,鏈結串列操作正確。

結語

物件模型將相關型別透過抽象基類介面封裝,利用指標/參考實現多態。雖付出間接性代價,但獲得極大設計彈性與擴充性。本範例展示兩層繼承結構 (匿名/註冊會員 → 正式會員 → 超級/管理會員) 的實際應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved