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

C++ 面向對象程設計基石:類的定義與實踐

     編輯:關於C++

類:封裝數據與行為的用戶定義類型

class 關鍵字定義類,成員分為數據成員(屬性)與成員函數(方法),通過訪問標簽控制可見性。

語法與訪問控制

class ClassName {
    // private: 默認(類內可見,外部不可見)
    int privateVar;

protected:
    // protected: 類內 + 派生類可見
    int protectedVar;

public:
    // public: 任何可見類的地方均可見
    void publicFunc();
    int publicVar;
} objectName; // 可選:直接定義對象
關鍵字類內派生類外部代碼
private✓✗✗
protected✓✓✗
public✓✓✓

經典實例:矩形類

class CRectangle {
    int width, height; // private 默認
public:
    void set_values(int w, int h); // 聲明
    int area() const { return width * height; } // 內聯定義
};

// 類外定義需作用域解析符 ::
void CRectangle::set_values(int w, int h) {
    width = w; height = h;
}

int main() {
    CRectangle rect;
    rect.set_values(3,4);
    cout << "Area: " << rect.area() << endl; // 12
    // rect.width = 5; // 錯誤:private 不可訪問
}

構造函數與析構函數:生命周期管理

構造函數

  • 同名、無返回類型(連 void 也無)
  • 對象創建時自動調用,完成初始化
  • 可重載,參數列表不同
class CRectangle {
    int width, height;
public:
    CRectangle(int w, int h) : width(w), height(h) {} // 成員初始化列表(推薦)
    CRectangle() : width(5), height(5) {}             // 默認構造
    int area() const { return width * height; }
};

CRectangle r1(3,4); // 調用帶參構造
CRectangle r2;      // 調用默認構造
// CRectangle r3();  // ❌ 最令人糾結的解析:聲明函數!

析構函數

  • ~ClassName(),無參、無返回
  • 對象銷毀時自動調用(離開作用域、delete)
  • 釋放資源:delete 動態內存、關閉文件/句柄、解鎖
class CRectangle {
    int *width, *height; // 動態分配演示
public:
    CRectangle(int w, int h) {
        width = new int(w);
        height = new int(h);
    }
    ~CRectangle() { // 析構釋放
        delete width;
        delete height;
    }
    int area() const { return *width * *height; }
};

構造函數重載與默認/拷貝構造

  • 若未聲明任何構造函數,編譯器隱式生成:
    ① 默認構造(無參、空體)② 拷貝構造(逐成員拷貝)
  • 若聲明了任意構造函數,隱式生成全部停止,需手動提供默認/拷貝構造

類的指針與對象數組

CRectangle obj;
CRectangle* ptr = &obj;
CRectangle* arr = new CRectangle[3]; // 動態數組

// 訪問成員
obj.area();        // 對象用 .
ptr->area();       // 指針用 ->
arr[0].area();     // 數組元素用 .
(arr+1)->area();   // 指針算術等價

// 釋放動態數組
delete[] arr; // 必須用 delete[]

struct / union 定義類

關鍵字默認訪問默認繼承特殊語義
classprivateprivate標準類
structpublicpublicC 兼容,可含成員函數
unionpublicpublic共享內存,同一時刻僅一成員有效,C++11 允許非平凡類型
struct Point { int x, y; }; // 全 public,適合純數據聚合
union Variant { int i; float f; char c; }; // 共用 4 字節

核心最佳實踐清單

  1. 數據成員私有,提供公有接口(getter/setter)控制訪問
  2. 構造函數使用成員初始化列表,而非函數體賦值(效率、const/引用成員必須)
  3. 管理資源的類必須聲明析構函數,遵循 RAII(資源獲取即初始化)
  4. 基類析構函數聲明 virtual,防止派生對象通過基類指針刪除時資源洩漏
  5. 拷貝構造/賦值運算符參數加 const:T(const T&)、T& operator=(const T&)
  6. 賦值運算符處理自賦值:if (this != &rhs) { ... }
  7. 不修改狀態的成員函數標記 const,const 對象只能調用 const 成員函數
  8. 避免在構造/析構中調用虛函數(派生部分尚未構造/已銷毀)
  9. 優先使用標準容器/智能指針 替代手動 new/delete 和裸數組

總結

類是 C++ 面向對象的核心,封裝實現不變式、管理資源生命周期、支持多態。掌握訪問控制、構造/析構/拷貝語義、初始化列表、RAII 與 Rule of Three/Five/Zero,是編寫健壯、可維護 C++ 代碼的基石。

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