地特三等申論題
108年
[資訊處理] 程式語言
第 三 題
三、試問下列程式碼的輸出為何?(25 分)
#include
using namespace std;
class A {
public:
int testa;
A() :testa(100) { }
virtual void f() {
cout << "apple" << endl;
}
void g() {
cout << "banana" << endl;
}
};
class B : public A {
public:
B() :testb(300) {}
void f() {
cout << "cat" << endl;
}
void g() {
cout << "dog" << endl;
}
int testb;
};
int main() {
B b;
A *a = &b;
a->g();
a->f();
cout << a->testa << endl;
cout << b.testb << endl;
system("pause");
return 0;
}
📝 此題為申論題
思路引導 VIP
本題測試 C++ 的物件導向核心概念,特別是「靜態綁定(Static Binding)」與「動態綁定(Dynamic Binding)」的差異。解題時需先確認指標型別與實體物件型別,並觀察函式是否帶有 virtual 關鍵字,以判斷方法呼叫是根據指標型別還是物件型別。
🤖
AI 詳解
AI 專屬家教
【解題思路】運用 C++ 的多型機制與建構子初始化順序,區分靜態綁定(非虛擬函式)與動態綁定(虛擬函式)。 【詳解】 已知:
▼ 還有更多解析內容