看下面的例子
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);
}
指向子类的指针,只有 红色的情况下
父类函数与子类函数形式相同(包括参数类型) | 父类是实函数 | 父类指针调父类函数;子类调用子类 |
父类函数与子类函数形式相同 | 父类是虚函数 | 都调用子类 |
父类函数与子类函数形式不同 | 父类调父类;子类调子类 |