普考申論題
111年
[資訊處理] 程式設計概要
第 一 題
📖 題組:
以下二小題是完整的物件導向程式碼,請回答以下各小題。(每小題 10 分,共 20 分)
以下二小題是完整的物件導向程式碼,請回答以下各小題。(每小題 10 分,共 20 分)
📝 此題為申論題,共 2 小題
小題 (一)
以下為 Python 完整程式碼,請回答執行的結果為何?
class Employee:
all = []
def __init__(self, idno, first_name, last_name):
self.id = idno
self.first_name = first_name
self.last_name = last_name
Employee.all.append(self)
def __repr__(self):
return f"(ID={self.id}, Name={self.first_name} {self.last_name})"
if __name__ == "__main__":
e1 = Employee('001', 'Peter', 'Lee')
e2 = Employee('002', 'Ann', 'Lo')
print(Employee.all)
思路引導 VIP
這題考查 Python 的類別變數與物件表示法。關鍵點有二:1. all = [] 是類別變數,所有實例共享,且在建構式中被 append。2. __repr__ 方法定義了當物件被放入列表並列印時的顯示字串。考生需精確寫出字串格式,包括括號、空格與逗號。
小題 (二)
以下為 C#的類別程式碼,類別 Employee 內的欄位不可以由非繼承的類別讀取或寫入,請檢視此程式是否可以正確執行?若無法正確執行的話,請寫出正確的程式碼。
public abstract class Employee {
private string id;
private string name;
private int age;
public Employee() {
}
}
public class Staff : Employee {
public Staff(string _id, string _name, int _age) {
this.id = _id;
this.name = _name;
this.age = _age;
}
}
思路引導 VIP
本題考查封裝與繼承的修飾詞(Access Modifiers)。關鍵爭點:private 成員能否被子類別直接存取?題目要求「不可以由非繼承的類別讀取」,隱含的意思是「可以由繼承的類別讀取」。目前的 private 限制太嚴,會導致子類別編譯失敗。應改用何種修飾詞?