作者james732 (好人超)
站內C_and_CPP
標題Re: [問題] 動態繫結、靜態繫結
時間Fri Jan 15 23:41:53 2010
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
推 kimmyariel:感謝!!! 推~ 02/09 16:02