- 1、本文档共35页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C第五章2)
不恰当的虚函数 如果虚函数在基类与子类中出现的仅仅是名字的相同,而参数类型不同,或返回类型不同,即使写上virtual,则不进行滞后联编. class Base { public: virtual void fn(int x) { cout“Base fn(int)”endl; } } 例外 class Base { public: virtual Base fn(int x) { return Base() ; } } 错误写法 静态成员变量 class Savings { Savings(unsigned int accNo) { acntNumber = accNo; count++; if(pFirst == NULL) pFirst = this; else { for(Saving *ps =pFirst;pS-pNext;pS= pS-Next); pS-pNext;} } protected: static Savings * pFirst; static count; Savings *pNext; unsigned int acntNumber; }; 再论虚函数 什么是纯虚函数? class A { virtual int fn(float c)=0; }; 能这样写吗? virtual int A::fn ( float c )=0; VTable class A { public: virtual void play(){} virtual void what() virtual void Adjust() } 虚表创建规则 1 编译器对每个包含虚函数的类创建一个表(VTABLE) .在VTABLE中,编译器放置特定类的虚函数地址. 2 每当创建一个从包含有虚函数的类派生一个类时,编译器就为这个类创建一VTABLE 3 如果在这个派生类中没有对在基类中声明为v i r t u a l的函数进行重新定义,编译器就使用基类的这个虚函数地址. 4 如果在这个派生类中有对在基类中声明为v i r t u a l的函数进行重新定义,就替换掉原来基类的虚函数的地址,并且位置保持一致. 5 派生类中新定义的基类没有的虚函数放在后面. VTable class A { public: virtual void play(){} virtual void what() virtual void Adjust() } VPTR 注意:VTABLE针对类 VPTR针对对象 对于每个对象只有一个VPTR。VPTR必须被初始化为指向相应的VTA BLE。一旦VPTR被初始化为指向相应的VTABLE,对象就“知道”它自己是什么类型。但只有当虚函数被调用时这种自我知识才有用 当创建一个包含有虚函数的对象时,必须初始化它的VPTR以指向相应的VTABLE 。这必须在有关虚函数的任何调用之前完成。编译器在构造函数的开头部分秘密地插入能初始化V P T R的代码。事实上,即使我们没有对一个类创建构造函数,编译器也会为我们创建一个带有相应V P T R初始化代码的构造函数(如果有虚函数) 多态简单理解 你有个基类的指针,调用了一个虚函数,请问这个虚函数是基类的吗?那么是谁的? 我们如何实现多态? 在函数参数中,使用基类指针或引用 在非函数调用阶段,使用指针 参数使用对象无法实现多态 纯虚函数 class Base { public: Base(){} virtual void x() = 0; } 抽象类 一个类若他有一个纯虚函数,这个类就是抽象类 抽象类不能实例化. class A { virtual f1()=0; virtual f2(){}; }; A a;//err 多继承 class?AmphibianCar:public?Car,public?Boat {? public:? AmphibianCar(int?weight,int?aird,float?tonnage)? ?? ?:Vehicle(weight),Car(weight,aird),Boat(weight,tonnage)? //有问题????????//多重继承要注意调用基类构造函数? ????????{? ????????? ?????
您可能关注的文档
- ANSYSWrkbench软件在集装箱静力分析中的应用_杨俊.pdf
- Authroare作业脚本设计模板.doc
- ASME及图常用词汇中英文对照表.pdf
- ASAP200 物理吸附仪操作手册.pdf
- ATOX50磨配件清单.pdf
- Auto CD 相关问题.pdf
- AutoCA 技巧.pdf
- AutoCA AND INVENTOR 英语词汇.doc
- AutoCA地形建模及其在土方计算中的应用.pdf
- Auto CD绘图技巧.pdf
- 校长2025年春季开学第一课讲话关于蛇的故事七篇.docx
- 校长2025年春季开学思政第一课讲话(秧BOT)7篇.docx
- 校长2025年春季开学思政第一课讲话优秀范文7篇.docx
- 校长在2025年春季开学典礼上的思政第一课讲话:注重家庭,注重家教,注重家风7篇.docx
- 校长2025年春季开学思政第一课讲话稿关于DeepSeek7篇.docx
- 校长关于DeepSeek2025年春季开学思政第一课讲话稿7篇.docx
- 必威体育精装版版2025年春季思政第一课讲话7篇.docx
- (春晚秧BOT)校长2025年春季开学思政第一课讲话稿7篇.docx
- 2025 蛇年开学思政第一课:探寻蛇文化的奥秘启迪智慧与成长7篇.docx
- 2025年春季开学典礼上的讲话(逐梦青春志在巅,思政领航启新篇)7篇.docx
最近下载
- 2023年贵州毕节市金沙县面向全县考调机关事业单位招聘笔试参考题库附带答案详解.pdf VIP
- 松下 Panasonic AG-CX200MC中文说明书 用户手册 说明书下载 使用指南 如何使用 详细操作 使用说明.pdf
- 经销商返利协议.docx VIP
- 消防安全知识培训课件(2023必威体育精装版).pptx
- 2023—2024学年湖南省普通高中高一下学期学业水平合格性考试化学模拟试卷.doc VIP
- 一种MES管理系统及MES管理方法.pdf VIP
- JBT 13604-2018 氧化铝专用料浆阀.pdf
- 土地法学教学课件.ppt VIP
- 2024新版(人教版)七年级英语上、下册单词带音标.pdf VIP
- 2024年初级会计职称《初级会计实务》精讲课件 第1-5章.pptx
文档评论(0)