考慮下面的代碼塊:如何在運行時確定對象的基礎類型?
class BaseClass
{
public:
virtual void hello() { cout << "Hello from Base" << endl; }
};
class DerivedClass : public BaseClass
{
public:
void hello() { cout << "Hello from Derived" << endl; }
};
int main()
{
BaseClass base;
DerivedClass derv;
BaseClass* bp = &base;
bp->hello();
bp = &derv;
bp->hello();
}
怎樣的類型,英國石油公司在決定指着運行?我知道它是動態綁定的,但是這樣做的機制是什麼? 我很困惑,因爲通常答案是編譯器,但是因爲它是動態的,所以在這個例子中不是這種情況(或者我錯了嗎?我假設編譯器提前提前,但是現在是什麼表示bp指向DerivedClass?)。我也來自C#,所以這個想法對我來說是陌生的,因爲這是沒有CLR的本地代碼。
[C++編譯器如何知道調用虛函數的實現?](http://stackoverflow.com/questions/203126/how-does-the-c-compiler-know-which-實現一個虛擬功能到校準) – 2012-04-20 18:51:49
確實,我找不到問題。我應該關閉這個嗎? – Riken 2012-04-20 19:02:01