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

作者: descent (「雄辯是銀,沉默是金」)   2018-04-03 19:05:01
※ 引述《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
作者: oiu850714 (oiu)   2018-04-03 19:19:00
..macro magic
作者: b0920075 (Void)   2018-04-03 19:30:00
哇,好噁心哦
作者: ilikekotomi (Young)   2018-04-03 21:06:00
沒注意過這個規則 感謝分享

Links booklink

Contact Us: admin [ a t ] ucptt.com