当基类中含有虚函数(virtual)时,在运行时刻,通过基类指针(或引用)指向(或引用)具体派生对象时,当调用该指针(或引用)的虚函数时,实际调用的是该具体派生类中定义的相应函数。 那么如果存在以下继承关系: class base; class derived1:public base{...}; class derivedderived1:public derived1{...}; 及derivedderived1继承自derived1,而derived1又继承自base,那么假设base中有一个虚函数 virtual void print(){...}; 在derived1中也定义了该函数只是没有声明为virtual: class derived:public base{ ...... public: void print(){...} ...... }; 在derivedderived1中也定义了形式上一样的print函数,也没有加virtual说明符;这种情况下,当一个base指针指向derivedderived1的对象,并调用print函数时,会调用哪个类中的print呢? 答案是:derivedderived1中定义的print。这说明了在继承层次中只要从某一层定义时加了virtual的成员函数,其n重派生类中均可实现多态。 现在有另一个问题就是如果derivedderived1中没有定义print这时将调用哪个类的print呢? 答案是:将调用derived1中定义的print函数

评论