- 1、本文档共44页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c程序嗄设计第8章1
派生类与基类(赋值兼容) 8.7 多态性与虚函数 作用: 抽象类为抽象和设计的目的而建立,将有关的数据和 行为组织在一个继承层次结构中,保证派生类具有要 求的行为。 对于暂时无法实现的函数,可以声明为纯虚函数,留 给派生类去实现。 注意 抽象类只能作为基类来使用。 不能声明抽象类的对象。 构造函数不能是虚函数,析构函数可以是虚函数。 * 本周习题: P307 习题8.6 实践教程:P89 实验二十四 2 本周实验: 习题上机调试 预习:第9章流类库与输入/输出 9.1~9.3 (1)理解C++的基本流类体系; (2)提高标准输入/输出的健壮性; (3)掌握提取与插入运算符的重载 (4)掌握文件的输入/输出:文件的打开与关闭,文本 文件与二进制文件。 (5)掌握在构造函数中通过文件建立对象,在析构函数 中由文件保存对象的技术。 类似用实型变量描述整数,这条规则称赋值兼容规则。赋值兼容包括以下三种情况: 1.派生类对象赋值给基类的对象。反之不行。如: Person p; Student s; p=s; 2.派生类对象的地址赋给基类指针。反之不行。如: Person *pointP; pointP=s; 3.派生类对象可以初始化基类的引用。反之不行。如: Person refP=s; 常见用法是函数形参为基类引用,实参是派生类对象 注意:以上赋值后都只能间接使用到继承来的成员。 #include iostream.h class A { public: void show( ){ coutA::show()endl; } }; class B: public A { public: void show(){ coutB::show()endl; } }; class C: public B{ public: void show(){ coutC::show()endl; } }; void main( ) { A a; //声明A类对象 B b; //声明B类对象 C c; //声明C类对象 A *p; //声明A类指针 p=a; //A类指针指向a类对象 p-show(); p=b; //A类指针指向B类对象 p-show(); p=c; //A类指针指向C类对象 p-show(); } 输出: A::display( ) A::display( ) A::display( ) 解决办法:虚函数 如果一个派生类有多个直接基类,而这些直接基类又 有一个共同的基类,则在最终的派生类中会保留该间接共 同基类数据成员的多份同名成员。--- 二义性 解决办法: 定义虚基类,使得在继承间接共同基类时只保留一份 成员。 为保证虚基类在派生类中只继承一次,应当在该基类 的所有直接派生类中声明为虚基类。否则仍然会出现对 基类的多次继承。 声明虚基类格式: class 派生类名:virtual 继承方式 基类名 虚基类的初始化: class A{ public: A(int i){ } }; class B:virtual public A{ public: B(int n):A(n){ } }; class C:virtual public A{ public: C(int n):A(n){ } }; class D:public B , public C{ public: D(int n):A(n),B(n),C(n){ } }; 注意: 前介绍,在派生类的构造函数中只需对其直接基类初始 化,再由其直接基类负责对间接基类初始化。 2. 现在,由于虚基类在派生类中只有一份数据成员,所以 这份数据成员的初始化必须由派生类直接给出。 派生类不仅要负责对其直接基类初始化还要负责对虚 基类初始化。 在派生类对象的创建中: 首先是虚基类的构造函数并按它们声明的顺序构造。 第二批是非虚基类的构造函数按它们声明的顺序调用。 第三批是成员对象的构造函数。 最后是派生类自己的构造函数被调用。 构造函数执行次序: 析构的次序与构造的次序相反。 例:通过构造函数的初始化表对虚基类进行初始化。 #include iostream.h class A{ //定义
您可能关注的文档
最近下载
- 国标动力专业图集 - 01(03)R413 室外热力管道安装(架空敷设).pdf
- API 571-2020影响炼油工业固定设备的损坏机理-中文版.pdf
- 中建铁路信用评价管理办法解读.pptx
- 2025年AMC8模拟卷和解析.pdf
- 2024中国工商银行福建分行乡村振兴专项招聘10人笔试备考试题及答案解析.docx VIP
- 《循环小数》跨学科解说(教学设计)-2023-2024学年五年级上册数学人教版.docx VIP
- 14S501单层、双层井盖及踏步(2015年合订本)(OCR).pdf VIP
- 2024年上海市金山区中考英语一模试卷.docx
- 视觉传播传统图形创新设计教学能力比赛教案.pdf
- 2025届高考专题复习:句式变换.pptx VIP
文档评论(0)