首页 > 编程语言 > 详细

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

时间:2015-06-27 23:55:02      阅读:296      评论:0      收藏:0      [点我收藏+]

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)指向虚函数表,这个会被继承的。。。。。

 

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

原文:http://www.cnblogs.com/Auris/p/4604823.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!