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 引用 |
| 調用時機 | 創建對象 | 銷毀對象 | 值傳遞/返回/初始化 |
| 可重載 | 是 | 否 | 否 |
void func(Line l)Line func() { return l; }Line l2 = l1; (非 l2 = l1 那是賦值)Line line1(10);
Line line2 = line1; // 拷貝構造
Line line3(line1); // 拷貝構造
printLine(line1); // 拷貝構造 (形參初始化)
輸出中出現 3 次析構:line1、line2、line3、printLine形參 — 共 4 個對象。
inlineclass Line {
friend void printLine(Line& l); // 非成員,可訪問私有成員
double length;
};
void printLine(Line& l) { cout << l.length; } // 基於對象訪問
this 指針,必須通過對象參數訪問成員ClassName* const (指針常量)return *thisLine& 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,只能訪問靜態成員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; // 類外定義
this 本質、return *this 鏈式模式