- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
//主程序:main.cpp#includebase.h#includederived.h#includeiostreamusingnamespacestd;intmain(){ Base*d=newDerived; d-foo(); deleted; return0;}運行結果:基類構造函數:Base::Base()被調用派生類構造函數:Derived::Derived()被調用派生類foo的實現:Derived::foo()被調用派生類析構函數:Derived::~Derived()被調用基類析構函數:Base::~Base()被調用7.4.3基類與派生類的構造3、派生類構造函數構造函數與析構函數不能被派生類繼承,每個類都應該定義自己的構造函數和析構函數,如果沒有定義,編譯器會自行生成默認構造函數和默認析構函數。默認構造函數都不帶任何形參,函數體都為空,派生類默認構造函數除了初始化派生類的數據成員,還調用基類默認構造函數初始化基類數據成員。當類成員包含指針成員時,默認構造函數實現的按位拷貝往往是不夠的,需要程式員提供構造函數,以保證類中指針數據成員被正確地初始化。7.4.3基類與派生類的構造為保證基類數據成員的初始化先於派生類數據成員,只能在派生類的構造函數的初始化列表中調用其直接基類的構造函數。注意,派生類構造函數的初始化列表只能初始化派生類成員,不能直接初始化從基類繼承的成員。派生類的構造函數使用初始化列表調用基類構造函數的一般形式為:派生類名(參數表):基類名(基類構造函數參數表){ //派生類構造函數體};7.4.3基類與派生類的構造4、構造函數不能是虛函數在類繼承體系中,首先構造函數不能是虛函數,沒有虛構造函數,其次虛機制在構造函數和析構函數中不起作用,就是說在基類構造函數和基類析構函數中對虛函數的調用不構成“多態”。【例7.5】構造函數和析構函數中,對虛函數的調用不構成多態。//頭檔:b.h#ifndef_B_#define_B_classB{public: B(); ~B(); virtualvoidvirt(); virtualvoidrelease();};#endif//頭檔:d.h#ifndef_D_//防止頭檔被重複引用#define_D_#includeb.hclassD:publicB{public: D(); ~D(); voidvirt(); //改寫基類B的虛函數 voidrelease();//改寫基類B的虛函數};#endif//實現檔:b.cpp#includeb.h#includeiostreamusingnamespacestd;B::B(){ //構造函數中虛機制不起作用,無論如何都是B::virt()被調用 cout在B::B()中,; virt();}B::~B(){//析構函數中虛機制不起作用,無論如何都是B::release()被調用 cout在B::~B()中,; release();}voidB::virt(){ coutB::virt()被調用endl;}voidB::release(){ coutB::release()被調用endl;}//實現檔:d.cpp#included.h#includeiostreamusingnamespacestd;D::D(){ cout在D::D()中,; virt();}D::~D(){ cout在D::~D()中,; release();}voidD::virt(){ coutD::virt()被調用endl;}voidD::release(){ coutD::release()被調用endl;}//主程序:main.cpp#includeb.h#included.h#includeiostreamusingnamespacestd;intmain(){ //構造函數中和析構函數中,對虛函數的調用不構成多態 B*b=newD; //基類B的指針b,調用B::virt() deleteb; //通過基類指針釋放派生類對象 coutendl; D*d=newD; //派生類D
您可能关注的文档
最近下载
- 差旅费报销培训(1).pptx VIP
- 大学生职业生涯规划.pdf VIP
- 2024年湖南省慈利县文化馆公开招聘试题带答案详解.docx VIP
- 2023年执业医师辅助检查实验室检查结果判读.pdf VIP
- 2025年预备党员入党积极分子转正考试题库(含答案).docx VIP
- 食堂食材配送肉类猪肉验收标准方案.docx VIP
- 机器学习算法安全评估指标体系、安全风险、对抗样本攻击.pdf VIP
- 复合材料pdfPPT课件.pptx VIP
- 2025【房地产企业财务风险的识别与应对研究—以华夏幸福为例15000字(论文)】.doc VIP
- 2024年甘肃兰州生物制品研究所有限责任公司招聘笔试参考题库附带答案详解.pdf
原创力文档


文档评论(0)