您的位置:首页 > 其它

虚函数与多态性

2016-06-01 11:33 148 查看
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),进而执行函数。这是在运行期间确定函数地址,叫做晚绑定,与之相反的在编译期间就已确定函数地址,则称作早绑定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: