计算机科学与编程导论模块6.ppt

  1. 1、本文档共85页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机科学与编程导论模块6

* * * * * * * * * * * * * * * * * * * * * * 重载、覆盖与隐藏 重载 成员函数被重载的特征: 相同的范围(在同一个类中) 函数名字相同 参数不同 与virtual无关 把重载函数的本名和参数的数据结合起来,创造函数的新名字 例如有如下两个函数原型 int myAns(float x, int j); int myAns(int i,char c); 用如下语句调用 ans1=myAns(14.2,25); ans2=myAns(62,’x’); int myAnsFLAOTINT(flaot x, int i); int myAnsINTCHAR(int i, char c); ans1=myAnsFLAOTINT(14,2,25); ans2=myAnsINTCHAR(62,’x’); class Cube { public: Cube( ) { height=1; width=1; length=1;} Cube(int h,int w,int l); { height=h; width=w; length=l; } private: int height; int width; int length; }; void main( ) { Cube cube1; Cube cube2(4,5,6); } Cube() CubeIntIntInt(4,5,6) 覆盖 覆盖是指派生类函数覆盖基类函数,特征是: 不同的范围(分别位于派生类与基类) 函数名字相同 参数相同 基类函数必须有virtual 关键字 覆盖规则其实就是C++虚函数表的实现原理 虚函数表 一个虚拟函数地址表,称为vtable。每个类的vtable中记录的是所有声明为virtual的成员函数的地址 如果在派生类中没有覆盖基类的成员函数,则在vtable中记录的是基类成员函数的地址 如果在派生类中有覆盖到基类的成员函数,则在vtable中记录的是派生类成员函数的地址 class base{ ??? public: ??????? func(); ??????? virtual vfunc1(); ??????? virtual vfunc2(); ??????? virtual vfunc3(); ??? private: ??????? int _data1; ??????? int _data2; ??? }; class derived: public base{ public: vfunc2(); }; void main( ) ??? { ??????? Derived d; ??????? Base *pb = d; ??????? pb-vfunc2(); ??? }? ???? base对象实例????????? vtable -------------------------------------------------------------------------- ???????? vptr --------- (*vfunc1)() ----------- base::vfunc1(); ??????? _data1?????????? (*vfunc2)() ----------- base::vfunc2(); ??????? _data2?????????? (*vfunc3)() ----------- base::vfunc3(); -------------------------------------------------------------------------- derived对象实例????????????? vtable -------------------------------------------------------------------------- ???????? vptr? --------- (*vfunc1)() ----------- base::vfunc1()?????? ??????? _data1;?????????? (*vfunc2)() ----------- derived::vfunc2()??? ??????? _data2;?????????? (*vfunc3)() ----------- base::vfunc3() --------------------------------------------------------------------

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档