作者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