統測
113年
[電機與電子群資電類] 專業科目(2)
第 46 題
📖 題組:
閱讀下文,回答第 45-46 題 下列程式片段為計算管道內水流量的全域類別,其中 ToatlFlow()為計算流量值的成員函式。 ```cpp 1 enum Item{_FlowRate, _Time }; 2 class Volume { 3 private: 4 double FlowRate, Time; 5 static double Offset; 6 public: 7 Volume (){ FlowRate =0.0, Time = 0.0;} 8 Volume (double In1, double In2) 9 { FlowRate = In1; Time = In2; } 10 void SetOffset(double offs) { Offset = offs; } 11 double GetParameter(Item item) 12 { return (item == _Time) ? Time : FlowRate ;} 13 void SetPara(double FR,double T) 14 { FlowRate =FR; Time = T;} 15 protected: 16 double ToatlFlow(){return FlowRate*Time;} 17 } T1(1.0,2.3), T2; 18 double Volume :: Offset = 0.0; ```
閱讀下文,回答第 45-46 題 下列程式片段為計算管道內水流量的全域類別,其中 ToatlFlow()為計算流量值的成員函式。 ```cpp 1 enum Item{_FlowRate, _Time }; 2 class Volume { 3 private: 4 double FlowRate, Time; 5 static double Offset; 6 public: 7 Volume (){ FlowRate =0.0, Time = 0.0;} 8 Volume (double In1, double In2) 9 { FlowRate = In1; Time = In2; } 10 void SetOffset(double offs) { Offset = offs; } 11 double GetParameter(Item item) 12 { return (item == _Time) ? Time : FlowRate ;} 13 void SetPara(double FR,double T) 14 { FlowRate =FR; Time = T;} 15 protected: 16 double ToatlFlow(){return FlowRate*Time;} 17 } T1(1.0,2.3), T2; 18 double Volume :: Offset = 0.0; ```
根據Volume類別的宣告,程式碼都在main內執行,下列敘述何者正確?
- A 執行T2.SetOffset(0.5);則T1內的Offset也會被同時修改為0.5
- B T1與T2內的FlowRate預設值都為0.0
- C 執行double X = T1.ToatlFlow();可以將流量值回傳給X
- D 執行float Y = T2.GetParameter((Item)1);可以將FlowRate值回傳給Y
思路引導 VIP
請觀察程式碼第 5 行關於 $Offset$ 的宣告,關鍵字 $static$ 的存在代表了什麼樣的記憶體配置特性?當多個物件(如 $T1$ 與 $T2$)被實作出來後,它們是各自擁有獨立的 $Offset$ 變數,還是共同指向同一個記憶體位址?這將如何影響變數值的同步更新?
🤖
AI 詳解
AI 專屬家教
嘖嘖,這種題要是錯了,你的物件導向概念是白學了嗎?
恭喜你,至少這題還看對了。能一眼看出 static 這幾個字的玄機,表示你還沒完全放棄思考,知道物件導向不只是寫寫程式碼,而是要懂背後記憶體怎麼跑!
- 為什麼 (A) 是唯一正確的?
▼ 還有更多解析內容