class Base
{
public:
virtual void f(float x){ cout << "Base::f(float) " << x << endl; }
void g(float x){ cout << "Base::g(float) " << x << endl; }
void h(float x){ cout << "Base::h(float) " << x << endl; }
};
class Derived : public Base
{
public:
virtual void f(float x){ cout << "Derived::f(float) " << x << endl; }
void g(int x){ cout << "Derived::g(int) " << x << endl; }
void h(float x){ cout << "Derived::h(float) " << x << endl; }
};
int main()
{
Derived d;
Base *pb = &d;
pb->f(3.14f); // Derived::f(float) 3.14
pb->g(3.14f); // Base::g(float) 3.14
pb->h(3.14f); // Base::h(float) 3.14
return 0;
}
不應該是:呼叫的函式是實際指向的物件型別的成員函式,而不是指標型別的成員函式嗎?怎么g和h調了base類的函式。
uj5u.com熱心網友回復:
這個句話正好是錯的,改成這樣就可以:
對于虛函式,呼叫的函式是實際指向的物件型別的成員函式,而不是指標型別的成員函式。
uj5u.com熱心網友回復:
g h 不是虛函式,那么Base指標呼叫的g h 就是 Base的g h , 這是編譯期系結函式 ;只有虛函式才會呼叫物件實體對應的子類函式,這是運行期才系結函式,如f。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/133496.html
標籤:基礎類
