C++在多层继承中调用虚函数

来源:互联网 发布:奚梦瑶长相知乎 编辑:程序博客网 时间:2024/05/20 13:36

 在一个类中的虚函数说明,只对派生类中重定义的函数有影响,对它的基类中的函数不起作用。

例:

#include <iostream>

using namespacestd;

class A

{

public:

   void show()

    {

        cout<<"The show in A."<<endl;

    }

};

class B:publicA

{

public:

  virtual void show()

    {

        cout<<"The show in B."<<endl;

    }

};


class C:publicB

{

public:

   void show()

    {

        cout<<"The show in C."<<endl;

    }

};





int main(int argc,const char * argv[])

{


   C cobj;

    cobj.show();//调用cshow方法。

    cobj.B::show();//调用Bshow方法。

    cobj.A::show();//调用ashow方法。

    

   A &refaobj=cobj;//引用。

    refaobj.show();//调用的是 ashow方法。

    

   B &refbobj=cobj;

    refbobj.show();//调用的是cshow方法。

    refbobj.B::show();//调用的是bshow方法。

    

 

    

   return 0;

}

   在程序中,我们将类B的show()函数声明为虚函数,所以在类c继承了类B后,它的show()函数也将是虚函数,因此在当类c的对象调用 show()函数时,它调用的是自己的成员。

    由于类A中没有声明虚函数,所以它的对象或引用调用show()时,也都将调用的是自己的成员

    类B声明自己的show()函数为虚函数,所以类c的对象初始化它的引用,类B的引用调用的是类C的成员函数。



原创粉丝点击