关闭

虚函数与多态性

147人阅读 评论(0) 收藏 举报
分类:
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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9381次
    • 积分:332
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:5篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论