看板 C_and_CPP 關於我們 聯絡資訊
class base { public: virtual void print() { cout << "base" << endl; } }; class derive : public base { public: void print() { cout << "derive" << endl; } }; void print(base *b) { b->print(); } int main() { int x; base *b; cin >> x; if (x > 0) b = new base; else b = new derive; print(b); delete b; retrun 0; } 像這樣的範例,在編譯這個程式時, 編譯器不可能知道會執行的是 new base 或 new derive 這個問題直到「執行時期」--也就是使用者輸入 x 的值以後,才能知道 而在 print 這個函式裡,那行 b->print() 究竟會呼叫到哪一個 print 也要在執行時期才會決定,這就叫做 dynamic binding 建議原 po 試著執行看看就會懂了 而 static binding 的話,就請你把 class base 裡的 virtual 拿掉 就會發現不管 b 是 new base 或 new derive,結果都會相同(哪一個?試試看囉!!) 因為在編譯的時候就已經決定了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.127.184.214 ※ 編輯: james732 來自: 59.127.184.214 (01/16 01:24)
mqazz1:謝謝大大的講解! 01/16 12:50
jakevin:幫補上網頁版程式碼 http://ideone.com/NTUz0 02/07 18:01
kimmyariel:感謝!!! 推~ 02/09 16:02