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

C++ 類與對象進階應用:對象數組、指針、this、const、動態管理、靜態成員

     編輯:關於C++

C++ 類與對象進階應用

接續基礎語法,本文涵蓋對象數組、對象指針、成員指針、this 指針、const 語義全景、動態對象管理、對象賦值與拷貝區別、靜態成員等核心進階主題。

一、對象數組

// 構造函數單參數可用初始化列表
Student stu[3] = { 90, 92, 101 };

// 多參數構造需逐個顯式調用
Student stu2[3] = {
    Student(1000, 19, 90),
    Student(1001, 20, 85),
    Student(1002, 19, 92)
};

二、對象指針

1. 指向對象的指針

Box box;
Box* ptr = &box;
ptr->volume(); // 等價 (*ptr).volume()

2. 指向成員的指針

類型聲明語法賦值/使用示例
數據成員指針int Box::* pData;pData = &Box::width; int w = box.*pData;
成員函數指針void (Box::* pFunc)();pFunc = &Box::volume; (box.*pFunc)();

關鍵點:成員函數指針類型必須匹配參數列表、返回類型、所屬類;指向 public 成員函數用 &Class::func,不可寫成 &obj.func(函數代碼不在對象內存中)。

三、this 指針

  • 每個非靜態成員函數隱式包含 ClassName* const this,指向調用對象。
  • 成員存取 data 實為 this->data 簡寫。
  • 用途:區分同名參數/返回 *this 實現鏈式調用/實現運算符重載。

四、const 全景

1. 常對象

const Time t(10, 20, 30); // 必須初始化
// 僅能調用 const 成員函數(構造/析構除外)

2. 常成員函數

void print() const; // 聲明與定義都要加 const
// 體內不可修改非 mutable 成員
// 常對象只能調用常成員函數

3. 常數據成員

  • 聲明:const int id;
  • 只能在構造函數初始化列表中初始化。

4. 指針與 const 組合

聲明含義
const int* p / int const* p常量指針:指向的值不可改
int* const p指針常量:指針本身不可改
const int* const p指向常量的常指針:雙重不可改

5. 形參傳遞與 const

  • void func(const int* p):實參可為 int* 或 const int*;函數內不可透過 p 修改值。
  • void func(int* p):實參只能為 int*;函數內可修改值。

6. 對象的常引用

const Box& ref = box; // 綁定非常量對象,視為只讀
// 僅能調用 const 成員函數

五、動態對象管理

Box* p = new Box(10, 20, 30); // 分配 + 構造,返回地址
// 使用 p->...
delete p; // 析構 + 釋放內存,p 成懸空指針,良習 p = nullptr;
  • new 失敗拋出 bad_alloc(或 nothrow 版返回 nullptr)。
  • 動態數組:Box* arr = new Box[10]; delete[] arr;(必須配對 [])。

六、對象賦值 vs 對象拷貝

操作語法本質前置條件
賦值obj2 = obj1;逐成員賦值(預設淺拷貝)obj2 已存在
拷貝構造Class obj2(obj1); / Class obj2 = obj1;創建新對象並初始化obj2 不存在

陷阱:若類含裸指針,預設賦值/拷貝均為淺拷貝 → 雙重釋放/懸空指針。必須實現深拷貝(拷貝構造 + 賦值運算符)或禁用(= delete)。

七、靜態成員

靜態數據成員

  • 聲明:static int count;(類內聲明,不分配內存)。
  • 定義初始化:int Class::count = 0;(類外,全局/靜態存儲區,僅一份)。
  • 存取:Class::count 或 obj.count(不推薦後者,易誤解為實例成員)。
  • 作用域僅限類內,不污染全局命名空間(優於全局變量)。

靜態成員函數

  • 聲明:static void func();
  • 無 this 指針,只能訪問靜態成員。
  • 調用:Class::func()(推薦)或 obj.func()。

八、圖解總結

成員函數指針調用示意 const 對象與成員函數調用規則 指針形參與實參 const 匹配規則 指針 const 組合圖解 常引用綁定規則 const 總結表 const 型數據總結 靜態成員內存佈局

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