收藏 分销(赏)

C++虚函数.doc

上传人:xrp****65 文档编号:7033482 上传时间:2024-12-25 格式:DOC 页数:3 大小:33.50KB
下载 相关 举报
C++虚函数.doc_第1页
第1页 / 共3页
C++虚函数.doc_第2页
第2页 / 共3页
点击查看更多>>
资源描述
3 多态性 张孝国 什么是虚函数 简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,就是实现多态性(Polymorphism)。多态性是指为一个函数名称关联多种含义的能力,它通过一种名为“晚期绑定”的特殊机制,为一个函数名称关联多个含义,在程序运行时确定一个函数名称的具体含义。例如: class A { public: void print() { cout<<”This is A”<<endl; } }; class B:public A { public: void print() { cout<<”This is B”<<endl; } }; int main() //为了在以后便于区分,这段main()代码叫做main1 { A a; B b; a.print(); b.print(); return 0; } 运行,结果分别是:This is A和This is B。class A和class B的print()这个接口,因两个class个体的差异而采用了不同的策略。但这是否是多态性呢? No,这种情况我们称为函数的重定义。多态有个关键之处就是:用基类类型的指针来操作它指向的对象时,会根据对象的不同类型,调用其相应类的函数。现在把main()处的代码改为: int main() //main2 { A a; B b; A* p1=&a; A* p2=&b; p1->print(); p2->print(); return 0; } 运行,结果是两个:This is A。 p2明明指向的是class B的对象,但调用的却是class A的print()函数,这不是我们所期望的结果,这主要是因为在编译时,编译器是按照p1和p2的类型来关联函数的。 解决这个问题需要使用虚函数,将一个函数设置成virtual函数,相当于告诉编译器:“目前不知道这个函数如何实现,等它在程序中使用时(即运行时),再从对象实例中获得它的实现。 class A { public: virtual void print() //现在成了虚函数了 { cout<<”This is A”<<endl; } }; class B:public A { public: void print() //这里一般要在函数前面加上关键字virtual。 { cout<<”This is B”<<endl; } }; 我们只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。所以,class B的print()也成了虚函数。但做为一种良好的编程风格,最好在派生类的相应函数前加上virtual关键字。 运行,结果是:This is A和This is B。 总结:用基类类型的指针来操作它指向的对象时,会根据对象的不同类型,调用其相应类的函数这个函数就是虚函数。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服