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

C++ 面向對象核心:類與對象、構造/析構/拷貝、靜態成員、this 指針、友元

     編輯:關於C++

類定義與對象創建

class Line {
private:
    double length;
public:
    void setLength(double len);
    double getLength();
    void print() { cout << "Length: " << length << endl; } // 隱式 inline
};

// 對象創建
Line line1;           // 棧上,自動管理
Line* line2 = new Line; // 堆上,手動 delete
delete line2;
  • 棧對象:作用域結束自動析構
  • 堆對象:需手動 delete,否則洩漏
  • 訪問成員:對象用 .,指針用 ->

構造函數、析構函數、拷貝構造

特性構造函數析構函數拷貝構造
名稱類名~類名類名(const 類名&)
返回類型無無無
參數可多參/重載無參const 引用
調用時機創建對象銷毀對象值傳遞/返回/初始化
可重載是否否

拷貝構造觸發場景

  1. 值傳遞參數:void func(Line l)
  2. 值返回:Line func() { return l; }
  3. 初始化:Line l2 = l1; (非 l2 = l1 那是賦值)

代碼演示輸出分析

Line line1(10);
Line line2 = line1;      // 拷貝構造
Line line3(line1);       // 拷貝構造
printLine(line1);        // 拷貝構造 (形參初始化)

輸出中出現 3 次析構:line1、line2、line3、printLine形參 — 共 4 個對象。

內聯函數

  • 類內定義隱式 inline
  • 編譯期展開,無函數調用開銷
  • 適用於短小、高頻函數;遞歸/虛函數/過長函數編譯器會忽略

友元函數

class Line {
    friend void printLine(Line& l); // 非成員,可訪問私有成員
    double length;
};
void printLine(Line& l) { cout << l.length; } // 基於對象訪問
  • 打破封裝,慎用
  • 無 this 指針,必須通過對象參數訪問成員
  • 可為函數、類、類的成員函數

this 指針

  • 所有非靜態成員函數隱含參數
  • 類型:ClassName* const (指針常量)
  • 用途:區分同名成員/參數、實現鏈式調用 return *this
Line& Line::setLength(double length) {
    this->length = length; // 區分成員與參數
    return *this;          // 支援鏈式:l.setLength(10).print();
}

靜態成員

  • static int count; — 全類共享一份,不屬於具體對象
  • 聲明在類內,定義在類外:int Line::count = 0;
  • 訪問:Line::count 或 obj.count (不推薦)
  • 靜態成員函數:無 this,只能訪問靜態成員

完整示例:帶對象計數的 Line 類

class Line {
    double length;
    static int objCount;
public:
    Line(double l = 0) : length(l) { ++objCount; cout << "Created, left: " << objCount << endl; }
    ~Line() { --objCount; cout << "Deleted, left: " << objCount << endl; }
    static int getCount() { return objCount; }
    // ... 其他成員
};
int Line::objCount = 0; // 類外定義

總結

  1. 掌握三大構造/析構/拷貝調用時機與輸出分析
  2. 理解 this 本質、return *this 鏈式模式
  3. 區分友元/內聯/靜態三類特殊成員的定義與限制
  4. 靜態成員聲明在類內、定義在類外,避免鏈接錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved