虚函数与多态性

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),进而执行函数。 这是在运行期间确定函数地址,叫做晚绑定,与之相反的在编译期间就已确定函数地址,则称作早绑定。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值