网站大量收购闲置独家精品文档,联系QQ:2885784924

《C++程序设计》课件第10章.pptVIP

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

classBase{public: virtualvoidf(){coutBase::fendl;} virtualvoidg(){coutBase::gendl;} virtualvoidh(){coutBase::hendl;}};typedefvoid(*Fun)(void);Baseb;FunpFun=NULL;intmain(void){ cout虚函数表地址:(int*)(b)endl; cout虚函数表-第三个函数地址:(int*)*(int*)(b)+2endl; //调用第三个虚函数 pFun=(Fun)*((int*)*(int*)(b)+2); pFun(); return0;}运行结果如下:在vtbl中,第一个虚函数地址指针位置是0046C01C,第二个虚函数地址指针位置是0046C020,第三个虚函数地址指针位置是0046C024,验证了前文中虚函数表是一个函数指针数组的结论。本章小结多态在C++中是通过虚函数实现的,它意味着具有“不同的形式”。多态是不能独立工作的特征,必须协同工作,它是类关系大家庭中的一部分。如果没有晚绑定就没有多态。为了在程序中有效地使用多态等面向对象的技术,不仅要让程序包含单个类的成员和消息,而且还必须知道类的共性和它们之间的关系。编程技巧与注意事项:(1)取一个对象的地址,并将其作为基类的地址来处理,被称为向上转换;(2)创建虚函数时在函数的前面加上virtual,定义时并不需要;(3)在基类中声明一个类为virtual,调用所有匹配基类声明行为的派生类函数都将使用虚机制,无需在派生类声明前使用关键字virtual;(4)编译器对每个包含虚函数的类创建一个表(VTABLE),放置虚函数的地址;(5)不带虚函数的普通类,对象的长度恰好就是所期望的,而带有单个虚函数的对象的长度是普通变量的长度加上一个void指针的长度;(6)虚函数防止产生VTABLE,但这并不意味着我们不希望对其他函数产生函数体;(7)如果使用对象而不是地址或引用进行向上映射,这个对象将被“切片”,直到所剩下来的是适合于目的的子对象。习题10.1有一个名为Shaper的类,它有两个派生类:Circle(圆)和Square(正方形)。测试程序如下:voidmain(){ Shape*p1,*p2; p1=newCircle(3,3.5,2); p2=newSquare(4.5,5,6.2,5); p1-Print(); p2-Print(); deletep1,p2;}要求:(1)设计3个类,分别完成以下功能:给出圆心坐标和半径,求圆的周长;给出正方形的中心坐标和一个定点坐标,求该正方形的周长。(2)在Shape类中定义纯虚函数print(),在Circle类和Square类中重载该函数求周长。10.2创建一个非常简单的“shape”层次:基类称为Shape,派生类称为Circle、Square和Triangle。在基类中定义一个虚函数draw(),再在这些派生类中重新定义它。在堆中创建Shape对象,并且建立一个指向这些Shape对象的指针数组。通过基类指针调用draw(),检验虚函数的行为。10.3修改练习10.2,使得draw()是纯虚函数。尝试创建一个类型为Shape的对象。并试着在构造函数内调用这个纯虚函数,看看结果如何。保留它的纯虚性,对draw()进行定义。10.4在练习10.3的基础上进一步创建一个通过传值方式接收Shape对象参数的函数,并且试着向上类型转换一个派生类对象作为参数。通过把参数设为Shape对象的引用来修改这个函数。10.5建立类box,其构造函数被传递给3个double值,每个值分别表示box的长、宽、高。用box类计算立方体的体积,计算结果保存在double变量中;在box类中包含一个成员函数print(),用来显示每个box对象的体积。10.6有一个汽车类vehicle,将它作为基类派生类小车类car、卡车类truck和轮船类boat,定义这些类并定义一个虚函数用来显示各类信息。10.7设计一个菜单驱动程序,每一个菜单项都对应一个类以完成它的功能,定义一个抽象类作为所有这些菜单项的基类,在其中定义一个纯虚函数,作为所有菜

文档评论(0)

酱酱 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档