[00000]-[2015-06-22]-[00]-[C++ 虚函数]

C++语言的多态性 与 C++类的虚函数有关

引入一个问题:定义一个基类指针,指向派生类对象,然后根据指针调用相应的方法,会有什么效果?

class CBase

{

public:

  virtual void vfun()

  {

    cout<<"vfun from base class"<<endl;

  }

  void fun()

  {

    cout<<"fun from base class"<<endl;

  }

};

class CDerive : public CBase

{

public:

  virtual void vfun()

  {

    cout<<"vfun from derive class"<<endl;

  }

  void fun()

  {

    cout<<"fun from derive class"<<endl;

  }

};

CBase* pBase;

CBase base;

CDerive derive;

【1】若 pBase = &derive; 

    pBase->vfun();

    pBase->fun();

   // 输出结果

    vfun from derive class

    fun from derive class

   // 虚函数在派生类中得到重载 且 指针指向派生类对象

【2】若 pBase只是定义,但是没有进行初始化;

    pBase->vfun();

    pBase->fun();

   // 会输出Base class 中的相应函数处理结果

   // 若要基类指针调用派生类的函数方法,要么让pBase指向派生类对象,要么对pBase进行类型显示强制转换(CDerive*)pBase;

    (CDerive*)pBase->vfun();

    (CDerive*)pBase->fun();

对于每一个内部含有虚函数的类,编译器都会为其生成一个虚函数表(vtable),表中的每个元素都指向一个虚函数的地址,编译器还会生成一个成员变量-----虚函数表指针(vptr)指向虚函数表,这个会被继承的。。。。。

 

posted @ 2015-06-27 22:44  Auris  阅读(157)  评论(0编辑  收藏  举报