功率考慮以下示例代碼:使用的虛函數
class Base {
public:
void f();
virtual void vf();
};
class Derived : public Base {
public:
void f();
void vf();
};
#include <iostream>
using namespace std;
void Base::f() {
cout << "Base f()" << endl;
}
void Base::vf() {
cout << "Base vf()" << endl;
}
void Derived::f() {
cout << "Derived f()" << endl;
}
void Derived::vf() {
cout << "Derived vf()" << endl;
}
int main()
{
Base b1;
Derived d1;
b1.f();
b1.vf();
d1.f();
d1.vf();
Derived d2; // Derived object
Base* bp = &d2; // Base pointer to Derived object
bp->f(); // Base f()
bp->vf(); // which vf()?
return 0;
}
運行的輸出是:
Base f()
Base vf()
Derived f()
Derived vf()
Base f()
Derived vf()
問題:
在線路
Base* bp = &d2
,對象類型在編譯時已知。那麼關於bp->vf();
使用哪個函數的決定也可以在編譯時進行?由於在編譯時本身已知對象類型,因此本示例程序中使用的虛函數的功能是什麼?
直至編譯器。在理性化方面似乎沒有什麼意義。 – 2011-12-14 16:01:59
@ TomalakGeret'kal:那麼在這個例子中,虛擬函數的強大功能不是正確的嗎? – 2011-12-14 16:04:33
這個問題並沒有意義。該語言準確地規定了你得到的行爲*,這正是你所看到的。有什麼不清楚的?更好的問題是「動態調度的成本」。 – 2011-12-14 16:07:59