[考題] 100普考 計概

看板Examination作者 (pinky)時間12年前 (2013/05/30 22:55), 編輯推噓5(5012)
留言17則, 5人參與, 最新討論串1/1
[考題] 國考歷屆考題與考題觀念討論(書裡看到的選這個)請附上想法、出處 出處:如題 下列以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

05/30 23:06, , 1F
override 覆寫
05/30 23:06, 1F

05/30 23:11, , 2F
不是OVERRIDE 是要做OVERLOADING但沒有用VIRTUAL宣告所以
05/30 23:11, 2F

05/30 23:12, , 3F
都是輸出PP
05/30 23:12, 3F

05/30 23:20, , 4F
C的基本觀念,沒寫過就不會知道..
05/30 23:20, 4F

05/30 23:21, , 5F
C++更正
05/30 23:21, 5F

05/30 23:46, , 6F
c.foo()印出C為什麼是overload 難道我記錯了?
05/30 23:46, 6F

05/31 00:20, , 7F
c沒要做OVERLOAD阿要做OVERLOAD的是PC和RC
05/31 00:20, 7F

05/31 00:21, , 8F
c就是在做OVERRIDE
05/31 00:21, 8F

05/31 00:22, , 9F
是我沒看到他問的問題樓上抱歉
05/31 00:22, 9F

05/31 00:52, , 10F
XD 不過我比較好奇原PO為什麼不是問pc->foo() rc.foo()
05/31 00:52, 10F

05/31 07:35, , 11F
可是p的foo並沒有加上virtual,所以沒有overloading
05/31 07:35, 11F

05/31 07:36, , 12F
那c.foo應該是印出父類別p的foo所以應該是印出'P'
05/31 07:36, 12F

05/31 07:37, , 13F
可是為什麼是印出'C'??各位大大我有理解錯了嗎??
05/31 07:37, 13F

05/31 08:29, , 14F
c.foo()跟virtual沒關係 單純透過繼承的定義即可
05/31 08:29, 14F

05/31 09:16, , 15F
PINKY92你就想成在P和C宣告一個相同名稱的變數 然後用C來
05/31 09:16, 15F

05/31 09:17, , 16F
引用就知道了原理是一樣的
05/31 09:17, 16F

10/11 22:55, , 17F
10/11 22:55, 17F
文章代碼(AID): #1HfsXLUY (Examination)