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

C++ 類別與物件完整入門:定義語法、存取控制、封裝特性與實作範例

     編輯:關於C++

類別與物件核心概念

  • 類別:自訂複合資料類型,將**資料(屬性)**與**操作資料的函數(方法)**封裝在一起。是物件的**抽象藍圖**。
  • 物件:類別的**具體實例**,佔用記憶體、擁有狀態與行為。
  • 三大特性:封裝性、繼承性、多態性。

類別定義語法


class <類別名稱> {
public:     // 公有介面,提供外部服務
    成員函數宣告;
    成員資料宣告;
private:    // 私有實作細節,隱藏內部狀態
    成員資料宣告;
    成員函數宣告;
protected:  // 保護成員,供衍生類別存取
    成員宣告;
};  // 分號不可省略

// 成員函數定義(類別外部)
回傳型別 類別名稱::函數名稱(參數列) {
    函數本體;
}

存取指定符

指定符存取權限典型用途
public任意處存取介面方法、常數
private僅類別內部、友元資料成員、輔助函數
protected類別內部、衍生類別、友元供繼承使用的成員
  • 順序不限、可重複出現
  • **預設為 private**(struct 預設 public)

完整範例:日期類別 TDate

分離宣告與實作(推薦)


// TDate.h
class TDate {
public:
    void SetDate(int y, int m, int d);
    int IsLeapYear() const;
    void Print() const;
private:
    int year_, month_, day_;
};

// TDate.cpp
void TDate::SetDate(int y, int m, int d) {
    year_ = y; month_ = m; day_ = d;
}

int TDate::IsLeapYear() const {
    return (year_%4==0 && year_%100!=0) || (year_%400==0);
}

void TDate::Print() const {
    std::cout << year_ << '-' << month_ << '-' << day_;
}

內嵌定義(簡單類別適用)


class TDate {
public:
    void SetDate(int y, int m, int d) { year_=y; month_=m; day_=d; }
    int IsLeapYear() const { return (year_%4==0&&year_%100!=0)||(year_%400==0); }
    void Print() const { std::cout << year_ << '-' << month_ << '-' << day_; }
private:
    int year_, month_, day_;
};

定義類別的關鍵規則

  1. 類別內不可初始化資料成員(C++11 起靜態常數整數除外),需在建構函式初始化
  2. 資料成員型別:可為基本型別、陣列、指標、引用、其他類別物件
  3. 遞迴包含限制:不可包含自身類別物件,但可包含**自身指標/引用**
  4. 成員排序建議:public 先於 private;資料成員按大小排序(小→大)提升記憶體對齊效率
  5. 習慣做法:宣告置於 .h,實作置於 .cpp,大型專案便於管理

作用域解析運算子 ::

格式:類別名稱::成員名稱,用於:

  • 類別外定義成員函數
  • 存取靜態成員
  • 區分同名全域/區域識別項

從結構體到類別的演進

特性C structC++ structC++ class
包含函數否是是
存取控制無預設 public預設 private
封裝性無有有
繼承無有有

物件導向設計原則

  • 高內聚:類別職責單一明確
  • 低耦合:類別間依賴最小化
  • 介面與實作分離:使用者只依賴 public 介面
  • 資訊隱藏:private 封裝實作細節
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved