int x=2, y=x+30; // 全域變數
struct A {
static int x; // 靜態成員
int y; // 實例成員
A(int x=::x+2, int y=::y+3) { A::x=x; A::y=y; } // 建構子
// ...
};
int A::x=23; // 靜態成員定義
| 位置 | 名稱 | 解析為 | 說明 |
|---|---|---|---|
建構子參數預設值 ::x+2 | ::x | 全域 x (2) | :: 強制全域作用域 |
建構子參數預設值 ::y+3 | ::y | 全域 y (32) | 同上 |
建構子本體 A::x=x | A::x | 靜態成員 A::x | 類別作用域 |
建構子本體 A::y=y | A::y | 實例成員 y | 隱藏參數 x、y |
成員函數 h 內 int y | y | 區域變數 | 遮蔽實例成員 y |
類別內的 `int y` 與建構子參數 `A::y` 是同一個實例成員。建構子參數名稱與成員同名時,參數遮蔽成員,需用 A::y 或 this->y 存取成員。全域 y 僅在建構子預設值運算式中被使用(::y)。
A a(54, 3); // 顯式傳參:x=54, y=3 → A::x=54, a.y=3
A b(65); // x=65, y=::y+3=35 → A::x=65, b.y=35
A c; // x=::x+2=4, y=::y+3=35 → A::x=4, c.y=35
// 注意:靜態成員 A::x 被每次建構覆寫,最終為 4
A a, b, c 最後 A::x = 4。