面向对象程序设计多态.ppt

上传人:夺命阿水 文档编号:263552 上传时间:2023-04-04 格式:PPT 页数:16 大小:746.50KB
返回 下载 相关 举报
面向对象程序设计多态.ppt_第1页
第1页 / 共16页
面向对象程序设计多态.ppt_第2页
第2页 / 共16页
面向对象程序设计多态.ppt_第3页
第3页 / 共16页
面向对象程序设计多态.ppt_第4页
第4页 / 共16页
面向对象程序设计多态.ppt_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《面向对象程序设计多态.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计多态.ppt(16页珍藏版)》请在课桌文档上搜索。

1、面向对象程序设计,目录,双击添加标题文字,概念、实现及代码,概念,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针或引用,来调用实现派生类中的方法。,代码,class A public:virtual void foo()cout foo();return 0;,A,B,pa,目录,双击添加标题文字,应用,影片出租店案例需要计算每位顾客的消费金额并打印报表。操作者录入影片信息、租期时长,程序根据租赁时长和影片信息计算出费用。其中,影片分为:VCD、DVD。由于光碟品质升级,影片类型后期需要添加BD(蓝光光碟)。基于业务考虑,程序除了要计算费用,还

2、要计算客户积分。,实现,class Diskpublic:virtual void caclRent(int days);class DVD:public Diskpublic:void caclRent(int days)int cost=days*3;cout该DVD的租期为days天,租金是:cost元。endl;/main.cppdouble caclRent(Disk,目录,双击添加标题文字,实现迟后联编的条件,基于继承体系成员函数使用virtual修饰,定义为虚函数子类重写(override)父类的成员函数通过对象指针或者对象引用调用,class Basepublic:virtua

3、l void foo()coutfoo();,virtual有什么用,先看看这段代码:class Baseint data;public:void foo()/如果加上virtual,结果如何?coutIn base class!endl;int main()coutsizeof(Base)endl;若类中有虚函数,创建对象时编译器会为其加上一个虚函数表。所有使用virtual修饰的函数,其入口地址都会存入虚函数表。,Base*base=new Base();base-foo();,Base*base=new Base();Base:foo(base);,Base*base=new Base(

4、);base-foo();,Base*base=new Base();base-vptr0();,无virtual,有virtual,为什么要使用指针/引用,在单继承体系中,子类和父类共用一个虚函数表,其中子类中定义的虚函数添加在父类虚函数的后面。如前述案例中,子类对象内存空间如图:对于对象,一但内存空间分配完毕,则虚函数表中函数指针所指向的函数就已经确定;而如果使用指针来访问,由于指针所指对象不同,因此实际使用的虚函数表也不同,相应的实际调用的函数也就不一样。,多态优缺点,优点:提供了把接口与实现分开的一种方法;提高了代码的组织性和可读性,更重要的是它使软件的可扩充性有了充分的提高;是OOP

5、的一个重要特征,提供了丰富的逻辑关系清晰的描述对象方法的手段,提高了软件功能和版本进化的设计维护能力。缺点:降低了程序执行的效率。,与其它语言对比,JavaJava中没有虚函数概念,或者说,Java中所有的成员函数都是虚函数,无需额外声明。Java中的对象只能分配在堆(Heap)中,然后在栈中用引用(reference)指向之,因此Java中自然实现动态绑定。C#C#中virtual和C+中类似。C#中默认情况下不允许使用指针,对象内存分配上类似于JavaC#中可以通过指定编译器选项,并使用unsafe关键字从而使用指针,但一般只用于编写native程序;对于托管程序,并不提倡使用指针。,感谢您的关注!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号