虚函数与多态性

原创 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),进而执行函数。这是在运行期间确定函数地址,叫做晚绑定,与之相反的在编译期间就已确定函数地址,则称作早绑定。

SDUT2679 6-1 多态性与虚函数

6-1 多态性与虚函数#include using namespace std;class Pet { public: virtual void speak()//定义基类函数为虚函数 ...
  • yue_luo_
  • yue_luo_
  • 2016年10月28日 15:40
  • 499

C++虚函数和多态性的关系【virtual】之一

很多学C++的人,对于如何理解其多态性,相信都挺模糊的,我也是其中一个。现在,我感觉我对这个理解有了更深一层的理解,现在写出来,和大家一起分享,如果有错,请大家不吝赐教。 如果没有虚函数【也就是vi...
  • ComeOnTom
  • ComeOnTom
  • 2012年05月10日 11:03
  • 3746

关于虚函数和多态(很好的解释)

C++:派生类中重定义基类的成员函数与虚函数区别在哪里?
  • foreverhuylee
  • foreverhuylee
  • 2014年07月17日 12:15
  • 2152

C++的多态与虚函数

多态的作用:继承是子类使用父类的方法,而多态则是父类使用子类的方法。 在C++中,多态有两种,一种是函数重载,一种是虚函数。函数重载发生在编译的时候,它的函数参是不一样的。而虚函数是发生在运行的时候,...
  • chencheng126
  • chencheng126
  • 2015年01月06日 21:49
  • 1728

C++ 复习 :知识点 多态性与虚函数

2017-6-18    1 多态性定义,作用.为什么会引入它。 2 虚函数的定义,作用,为什么会引入它。 3 向上类型的定义,作用。 4 捆绑定义,早捆绑,晚捆绑,为什么要实现捆绑。 5 虚函数的扩...
  • cwcww1314
  • cwcww1314
  • 2017年06月18日 17:35
  • 223

C++虚函数与多态性

》多态性的概念         一个面向对象的系统常常要求一组具有相同基本语义的方法能在同一接口下为不同的对象服务,这就是多态性(polymorphism)。与传统的面向过程的高级语言相比,C++不...
  • darkxiaoming
  • darkxiaoming
  • 2017年04月22日 17:27
  • 252

sdut 6-1 多态性与虚函数

6-1 多态性与虚函数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 通过本题目的...
  • u013634961
  • u013634961
  • 2014年10月29日 20:59
  • 742

C++面向对象程序设计——多态性和虚函数

多态:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。(消息,就是指调用函数) 多态性分为两类:静态多态和动态多态。 静态多态是通过函数的重载实现的,动态多态的特...
  • qq_26816417
  • qq_26816417
  • 2017年03月14日 14:26
  • 261

C++精髓之多态性与虚函数

面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为。在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体。也可以这样说就是实现了“一个接...
  • yanghaitao_1990
  • yanghaitao_1990
  • 2016年06月04日 15:37
  • 342

虚函数和多态性---总结

  l         虚函数和多态性使得设计和实现易于扩展的系统成为可能。在程序开发过程中,不论类是否已经建立,程序员都可以利用虚函数和多态性先编写这些类对象的程序。l         虚函数和多态...
  • xuexiuyin
  • xuexiuyin
  • 2007年06月07日 10:32
  • 1814
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:虚函数与多态性
举报原因:
原因补充:

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