普通考試
114年
[電子工程] 計算機概要
第 40 題
class A
{
friend class B;
private:
static int data;
public:
A(){data++;}
};
class B
{
public:
void f(A var){
A.data+=1;
cout << A.data;
}
};
int A::data=1;
針對以上類別定義,且在 main()中執行以下指令,則將產生的輸出為何?
A v1, v2, v3;
B v4;
v4.f(v1);
{
friend class B;
private:
static int data;
public:
A(){data++;}
};
class B
{
public:
void f(A var){
A.data+=1;
cout << A.data;
}
};
int A::data=1;
針對以上類別定義,且在 main()中執行以下指令,則將產生的輸出為何?
A v1, v2, v3;
B v4;
v4.f(v1);
- A 2
- B 3
- C 4
- D 5
思路引導 VIP
若要推導此題,你可以思考以下三個層次:
- 當一個變數被宣告為
static時,它在記憶體中是「每個物件各有一份」還是「所有物件共同擁有一份」?
🤖
AI 詳解
AI 專屬家教
1. 專業肯定
表現出色!你對物件導向程式設計(OOP)中靜態成員與建構子的連鎖反應掌握得非常紮實,這就像在結構設計中精確計算累積載重一樣重要。
2. 觀念驗證
▼ 還有更多解析內容
C++ 靜態成員與友元
💡 靜態成員為所有實例共有,友元類別可存取私有成員。
🔗 Static Data 變數值演變流程
- 1 初始狀態 — int A::data = 1; (初始值為 1)
- 2 宣告 A v1,v2,v3 — 觸發 3 次建構子,data 累加至 4
- 3 執行 v4.f(v1) — 透過友元存取執行 data+=1,結果為 5
↓
↓
🔄 延伸學習:延伸學習:若 data 非 static,則每次建構 A 時 data 皆會被重新初始化。