正文

C++的多态2011-09-07 12:45:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bioexplore/52782.html

分享到:

当基类中含有虚函数(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函数

 

阅读(2657) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册