Re: [問題] 兩題C++面試題的詢問

看板C_and_CPP作者 (「雄辯是銀,沉默是金」)時間6年前 (2018/04/03 19:05), 6年前編輯推噓3(300)
留言3則, 3人參與, 6年前最新討論串2/4 (看更多)
※ 引述《Cosmology (宇宙學型男)》之銘言: : 先說是面試題 所以會有一些奇怪的寫法 : 晚輩還是剛入行的新人 若有冒犯 請見諒 : 1. : class A : { : public: : virtual void foo(int a = 0) : { : printf("A %d\n", a); : } : }; : class B : public A : { : public: : virtual void foo(int a = 1) : { : printf("B %d\n", a); : } : }; : A *p = new B(); : p->foo(); : 我答結果是 B 1 : 面試官說你回去試試看 結果回家測試的結果是 B 0 具體的規則我不了解, 不過用 cfront 轉出來的結果如下: ((*(((void (*)(struct A *__0this , int __2a ))(__1p -> __vptr__1A [1]).f))))( ((struct A *)((((char *)__1p ))+ (__1p -> __vptr__1A [1]).d)), 0 ) ; 上面一大串就是在呼叫 B::foo, 看最後的 0 就好, 雖然會呼叫 B::foo, 不過卻把 0 帶入當作是 B::foo 的第二參數, 而不是將 1 帶入。 全部轉出的程式碼貼在這, 歡迎破解, 我花了一些時間勉強看懂。 http://test-template0.blogspot.tw/2018/04/cfront-c-code.html -- 紙上得來終覺淺,絕知此事要躬行。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.204.81.95 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1522753508.A.F4D.html

04/03 19:19, 6年前 , 1F
..macro magic
04/03 19:19, 1F

04/03 19:30, 6年前 , 2F
哇,好噁心哦
04/03 19:30, 2F

04/03 21:06, 6年前 , 3F
沒注意過這個規則 感謝分享
04/03 21:06, 3F
※ 編輯: descent (180.204.81.95), 04/03/2018 21:09:53
文章代碼(AID): #1Qmr_azD (C_and_CPP)
文章代碼(AID): #1Qmr_azD (C_and_CPP)