作者pinky92 (pinky)
看板Examination
標題[考題] 100普考 計概
時間Thu May 30 22:55:14 2013
[考題] 國考歷屆考題與考題觀念討論(書裡看到的選這個)請附上想法、出處
出處:如題
下列以C++程式語言撰寫之程式執行後的輸出為何?
#include <iostream>
using namespace std;
class P {
public:
void foo() { cout << 'P'; }
};
class C : public P {
public:
void foo() { cout << 'C'; }
};
int main()
{
P p; C c;
P *pc = &c;
P &rc = c;
p.foo();
c.foo();
pc->foo();
rc.foo();
return 0;
}
(A)PCPP (B)PPPP (C)PCCC (D)CCCC
答案是A
可是請問為什麼c.foo()是印出C ?而不是呼叫父類別P的foo() ?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.27.108.40
1F:推 asdd:override 覆寫 05/30 23:06
2F:→ malowda:不是OVERRIDE 是要做OVERLOADING但沒有用VIRTUAL宣告所以 05/30 23:11
3F:→ malowda:都是輸出PP 05/30 23:12
4F:推 carterdunk:C的基本觀念,沒寫過就不會知道.. 05/30 23:20
5F:→ carterdunk:C++更正 05/30 23:21
6F:推 asdd:c.foo()印出C為什麼是overload 難道我記錯了? 05/30 23:46
7F:→ malowda:c沒要做OVERLOAD阿要做OVERLOAD的是PC和RC 05/31 00:20
8F:→ malowda:c就是在做OVERRIDE 05/31 00:21
9F:→ malowda:是我沒看到他問的問題樓上抱歉 05/31 00:22
10F:推 asdd:XD 不過我比較好奇原PO為什麼不是問pc->foo() rc.foo() 05/31 00:52
11F:→ pinky92:可是p的foo並沒有加上virtual,所以沒有overloading 05/31 07:35
12F:→ pinky92:那c.foo應該是印出父類別p的foo所以應該是印出'P' 05/31 07:36
13F:→ pinky92:可是為什麼是印出'C'??各位大大我有理解錯了嗎?? 05/31 07:37
14F:推 asdd:c.foo()跟virtual沒關係 單純透過繼承的定義即可 05/31 08:29
15F:→ malowda:PINKY92你就想成在P和C宣告一個相同名稱的變數 然後用C來 05/31 09:16
16F:→ malowda:引用就知道了原理是一樣的 05/31 09:17