瑛澤 發問時間: 電腦與網際網路程式設計 · 1 0 年前

有關程式語言的一些問題!!很急!!贈20點

Consider the following code snippet of C++:

class A {

public:

int x;

virtual void f();

};

class B {

public:

int y;

virtual void g();

virtual void f();

};

class C: public A, public B {

public:

int z;

virtual void f();

};

main(){

C *pc = new C;

B *pb = pc;

A *pa = pc;

}

(a) Explain the steps involved in finding the address of the function code in the call pc->f(). Be sure to distinguish what happens at compile time from what happens at run time. Which address is found, &A::f(), &B::f(), or &C::f()?

(b) Do the same thing for the call pa->f(). Is it the same as that for the call pb->f()?

(c) How could the call pc->g() be implemented?

請求高手求救!!>"< 幫我回答這三題

我真的不知道到底答案是什麼~

拜託~~~

請要真的會再回答,我不希望獲得錯誤的答案!!

贈20點!!!!!!

1 個解答

評分
  • 1 0 年前
    最佳解答

    這位同學, 這年頭工作不好找. 這個題目是練基本功的好材料.

    出題的人算是用心良苦

    (a) Class C 已經實作出 f() 了, 所以理所當然 pc-&gt;f() 會執行 C::f()

    (b) 雖然 pa, pb 已將 pc 轉型成 Class A, B 的參考指標, 不過因為 pc 的具現化(instance initiation)是 Class C 的樣貌. 而且 Class C 是Class A, B 的子類別

    所以 pa-&gt;f(), pb-&gt;f() 依然是執行 C::f()

    (c)既然 Class C 繼承 Class B, 而 Class C 也沒有覆寫 (overwrite) function g(), 所以 pc-&gt;g() 會執行 B::g()

    p.s.

    1. 有跑過 VS2005, 執行結果如以上答案. 不是憑經驗瞎呼嚨

    2. 有些 C++ 原理描述的用詞可能不精確, 請其他高手指教修改

    3. 同學, 實踐出真知, 還是建議你用程式跑跑看. 才能真正吸取知識. 資訊業界其實 C/C++ programmer 很少, 很難找. 一旦找到&quot;合格, 有潛力的&quot;薪資至少是四萬起跳

    2009-06-11 13:16:10 補充:

    覆寫應該是"overloading" 不是"overwrite"

還有問題?馬上發問,尋求解答。