看下面的例子
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; } }; void main(void) { Derived d; Base *pb = &d; Derived *pd = &d; pb->f(3.14f); pd->f(3.14f); pb->g(3.14f); pd->g(3.14f); pb->h(3.14f); pd->h(3.14f); }
指向子类的指针,只有 红色的情况下
父类函数与子类函数形式相同(包括参数类型) | 父类是实函数 | 父类指针调父类函数;子类调用子类 |
父类函数与子类函数形式相同 | 父类是虚函数 | 都调用子类 |
父类函数与子类函数形式不同 | 父类调父类;子类调子类 |