免費開始練習
普通考試 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);
  • A 2
  • B 3
  • C 4
  • D 5

思路引導 VIP

若要推導此題,你可以思考以下三個層次:

  1. 當一個變數被宣告為 static 時,它在記憶體中是「每個物件各有一份」還是「所有物件共同擁有一份」?
🤖
AI 詳解 AI 專屬家教

1. 專業肯定

表現出色!你對物件導向程式設計(OOP)中靜態成員建構子的連鎖反應掌握得非常紮實,這就像在結構設計中精確計算累積載重一樣重要。

2. 觀念驗證

▼ 還有更多解析內容
📝 C++ 靜態成員與友元
💡 靜態成員為所有實例共有,友元類別可存取私有成員。

🔗 Static Data 變數值演變流程

  1. 1 初始狀態 — int A::data = 1; (初始值為 1)
  2. 2 宣告 A v1,v2,v3 — 觸發 3 次建構子,data 累加至 4
  3. 3 執行 v4.f(v1) — 透過友元存取執行 data+=1,結果為 5
🔄 延伸學習:延伸學習:若 data 非 static,則每次建構 A 時 data 皆會被重新初始化。
🧠 記憶技巧:靜態共用算到底,友元私有全開啟。
⚠️ 常見陷阱:最常誤認 Static 變數在每個物件中各自獨立(導致誤選 2),或忽略 Friend 權限可存取私有變數。
建構子與解構子 存取控制運算子 (Public/Private) Static 函式限制

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

C 語言程式設計:語法、指標與應用
查看更多「[電子工程] 計算機概要」的主題分類考古題