虚函数与多态性

原创 2016年06月01日 11:33:13
1 概念
多态性是面向对象语言的一个重要性质,虚函数是帮助C++实现多态性的技术。

多态性体现在可以使用基类的指针调用派生类的同名函数。前提是基类的同名函数是virtual的。

2 例子
例如:
class Tool
{
Public:
Tool() {}
~Tool() {}

virtual use()
{
cout<< "Tool use" <<endl
}
}


class Pen : Public Tool
{
Public:
Pen() {}
~Pen() {}

use()
{
cout<< "Pen use" <<endl
}


}

int MyUse(Tool& tool)
{
tool.use();
return 0;
}


int main()
{
Pen pen;
MyUse(pen);


return 0;
}

执行结果是“Pen use”,在MyUse中调用的是pen的use(),符合人们的目的;
如果基类Tool的use()不是virtual,则执行结果是“Tool use”,就是说MyUse()中的tool.use()只会调用Tool类的use()。

3 使用VTABLE
编译器是怎么知道调用Pen的use()? 这是编译器做的工作,编译器在每个包含虚函数的类中建立了虚函数表VTABLE,并且分配了指向这个VTABLE的指针vptr。
编译器通过查找VTABLE,得到要执行函数的地址(vptr+n),进而执行函数。这是在运行期间确定函数地址,叫做晚绑定,与之相反的在编译期间就已确定函数地址,则称作早绑定。

C++继承,虚函数与多态性专题.

  • 2012年05月05日 19:35
  • 333KB
  • 下载

C++类的多态性与虚函数的使用

1回顶部     类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多人错误的认为,支持类的封装的语言就是支持面向对象的,其实不...
  • colddie
  • colddie
  • 2013年03月08日 16:31
  • 363

多态性与虚函数课程设计.ppt

  • 2011年09月27日 11:02
  • 258KB
  • 下载

c++课件 多态性与虚函数

  • 2012年05月08日 15:52
  • 391KB
  • 下载

利用C++模板,代替虚函数实现类的静态多态性及动态继承

转自:http://blog.csdn.net/nancy_m/article/details/8691681 熟悉模板编程的朋友或许听到过这个技巧或者模式:Barton-Nackm...

试谈C_的多态性和虚函数

  • 2012年07月04日 17:00
  • 20KB
  • 下载

C++程序设计-第14周 多态性与虚函数

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565【目的】1. 掌握多态性的基本概念2. 学会利用虚函数实现多态性3. 学会在...

C++继承,虚函数与多态性专题

  • 2010年08月04日 08:41
  • 325KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:虚函数与多态性
举报原因:
原因补充:

(最多只允许输入30个字)