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

C++ 面向物件程式設計入門:類別、封裝與存取控制

     編輯:VC 教學

前言

類別 (class) 是 C++ 面向物件的核心,將資料與操作封裝為可重用單元。本文從結構體延伸,建立類別、物件、成員、存取控制等核心概念。

一、從結構體到類別

// 結構體 (C 風格,資料導向)
struct Student {
    int id;
    float score;
};

// 類別 (C++ 風格,行為導向)
class Student {
private:    // 私有:類別內部可存取
    int id;
public:     // 公開:介面,外部可存取
    float score;
    int GetId() const { return id; }       // 唯讀存取器
    void SetId(int v) { id = v; }          // 寫入器 (可驗證)
};

二、核心術語對照

傳統/結構體術語面向物件術語說明
結構體變數物件 / 實例類別的具體化實體
成員變數資料成員 / 屬性物件狀態
成員函數方法 / 成員函數物件行為
建構子建構子初始化物件
解構子解構子清理資源

三、存取控制三大關鍵字

關鍵字可見範圍用途
public任何地方對外介面:建構子、公有方法、常數
protected類別內部 + 衍生類別給子類別用的輔助方法/資料
private僅類別內部內部實作細節、不變式保護

預設存取權

  • class:**預設 private**
  • struct:**預設 public** (相容 C)

四、物件建立與成員存取

Student stu;           // 呼叫預設建構子
stu.score = 95.5f;     // 公開資料成員直接存取
// stu.id = 100;       // 錯誤:private 不可外部存取
stu.SetId(100);        // 透過公開方法間接存取
int id = stu.GetId();  // 讀取私有資料

五、完整範例:封裝銀行帳戶

class BankAccount {
private:
    std::string owner;
    double balance;
    static double interestRate; // 靜態成員:類別級共享

public:
    BankAccount(const std::string& name, double initial)
        : owner(name), balance(initial) {} // 成員初始化清單

    void Deposit(double amount) {
        if (amount > 0) balance += amount;
    }
    bool Withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount; return true;
        }
        return false;
    }
    double GetBalance() const { return balance; }
    const std::string& GetOwner() const { return owner; }

    static void SetInterestRate(double r) { interestRate = r; }
    static double GetInterestRate() { return interestRate; }
};

// 靜態成員定義 (在 .cpp 中)
double BankAccount::interestRate = 0.015;

六、C 與 C++ 程式設計範式對比

維度C (程序導向)C++ (物件導向)
核心公式程式 = 演算法 + 資料結構物件 = 演算法 + 資料結構
程式 = 物件 + 物件 + ...
資料與函數分離封裝於類別
重用機制函數庫、複製貼上繼承、組合、模板、多型
擴充性修改原始碼衍生新類別、覆寫虛擬函數

七、域解析運算子 ::

  • ClassName::StaticMember:存取靜態成員
  • ClassName::Method():類別外定義成員函數
  • Namespace::Name:命名空間限定
  • ::GlobalName:全域命名空間

八、常見新手錯誤

錯誤正確認知
以為 private 能防駭客/反編譯僅編譯期存取控制,執行期記憶體可直接讀寫
所有成員設為 public 方便破壞封裝,無法維護不變式,耦合度極高
建構子未初始化所有成員使用成員初始化清單,啟用編譯器警告
混淆「物件」與「類別」類別是模具,物件是實例 (如圖紙 vs 房子)

結語

類別透過 private 隱藏實作、public 暴露介面,實現封裝。這是 C++ 從 C 進化的關鍵:將「資料+操作」綁定,建立清晰契約,支援大規模軟體工程。下一章將深入建構子、解構子與資源管理 (RAII)。

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