Re: [問題] 動態繫結、靜態繫結

看板C_and_CPP作者 (好人超)時間15年前 (2010/01/15 15:41), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串1/1
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)

01/16 12:50, , 1F
謝謝大大的講解!
01/16 12:50, 1F

02/07 18:01, , 2F
幫補上網頁版程式碼 http://ideone.com/NTUz0
02/07 18:01, 2F

02/09 16:02, , 3F
感謝!!! 推~
02/09 16:02, 3F
文章代碼(AID): #1BK8p46C (C_and_CPP)