11.5.2 覆盖
覆盖指的是派生类的成员函数覆盖基类中的同名函数,要求两个函数的参数个数和类型相同,且基类函数必须是虚函数,这样,在派生类中便覆盖了该虚函数,以该派生类做基类再进行派生时,后续派生类继承的便是覆盖后的虚函数版本,除非在后续派生类中对该虚函数进行重定义。举例如下所示。
class A { …… virtual void fun1(int,int); virtual int fun2(char*); …… }; class B:public A { …… void fun1(int,int); …… }; class C:public B { …… int fun2(char*); …… };
上述代码中,类B中fun1函数覆盖了类A中的fun1函数,同时,类B继承了类A中的fun2函数,类C继承了类B中的fun1函数,却重定义了fun2函数对类B从类A继承来的fun2函数进行了覆盖。
此时,若声明基类A型指针“A*pA=new C;”,根据虚函数的动态联编原则,“pA->fun1;”将执行类B中定义的fun1函数,而“pA->fun2;”将执行类C中定义的fun2函数。