- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C继承与多态要点
* 二义性:无法确定性、不唯一性 多重继承中可能出现的两种二义性: 同名引起的二义性 公共基类带来的二义性 解决二义性方法:作用域运算符::,虚基类 * 当多重继承的派生类的不同父类中含有同名成员时,这些成员都会被派生类所继承,如果在派生类中简单地通过名字来使用这些成员,就会产生二义性。 为了避免二义性,在派生类中使用不同父类的同名成员时,必须在成员名之前用基类名::来限定,以明确指出所使用的成员是从哪个基类继承来的。 * class A//声明基类A{…};class B :virtual public A//声明类B是类A的公用派生类,A是B的虚基类{…};class C :virtual public A//声明类C是类A的公用派生类,A是C的虚基类{…}; 因为一个基类可以在生成一个派生类时作为虚基类,而在生成另一个派生类时不作为虚基类。经过这样的声明后,当基类通过多条派生路径被一个派生类继承时,该派生类只继承该基类一次。需要注意: 为了保证虚基类在派生类中只继承一次,应当在该基类的所有直接派生类中声明为虚基类。否则仍然会出现对基类的多次继承。虚基类的初始化如果在虚基类中定义了带参数的构造函数,而且没有定义默认构造函数,则在其所有派生类(包括直接派生或间接派生的派生类)中,通过构造函数的初始化表对虚基类进行初始化。例如class A//定义基类A{? ?A(int i){ } //基类构造函数,有一个参数};class B :virtual public A //A作为B的虚基类{? ?B(int n):A(n){ } //B类构造函数,在初始化表中对虚基类初始化};class C :virtual public A //A作为C的虚基类{? ?C(int n):A(n){ } //C类构造函数,在初始化表中对虚基类初始化};class D :public B,public C //类D的构造函数,在初始化表中对所有基类初始化{? ?D(int n):A(n),B(n),C(n){ }};注意: 在定义类D的构造函数时,与以往使用的方法有所不同。规定: 在最后的派生类中不仅要负责对其直接基类进行初始化,还要负责对虚基类初始化。C++编译系统只执行最后的派生类对虚基类的构造函数的调用,而忽略虚基类的其他派生类(如类B和类C) 对虚基类的构造函数的调用,这就保证了虚基类的数据成员不会被多次初始化。 * * 多态:同一个函数名具有不同的实现,同一个运算符具有不同的功能。 ----函数重载和运算符重载 C++支持两种多态性:编译时的多态性和运行时的多态性。 ----静态联编——重载 和动态联编——继承和虚函数 多态的功能强大 * 原指向小空间的指针可以指向大空间,但只能指向它的前一部分”。也即替代之后的派生类仅发挥基类的作用 “原指向大空间的指针(指向派生类的指针)不允许再指向小空间(再指向基类对象)” 虚函数改变了联编方式; 将成员函数声明为虚函数相当于告诉编译程序:由指针实际指向的对象类型决定调用哪个类中定义的函数 使用虚函数时的注意事项: (1)在基类(不一定是最高)中声明虚函数,用虚函数实现多态性时,派生类应从基类公有派生; (2)派生类中同型(与基类虚函数原型完全相同)的成员函数自动成为虚函数; (3)只有非静态成员函数可以声明为虚函数; (4)虚函数声明只出现在类声明中的函数原形中,而不能在成员的函数体实现的时候; (5)虚函数由成员函数调用或通过指针、引用来访问; 使用普通对象调用虚函数时,系统仍然以静态联编方式完成对虚函数的调用。在派生类中声明的成员函数,如果与基类中的虚函数名字相同,但参数不同,是一般的函数重载,屏蔽了基类中的虚函数。 * 赋值兼容性规则: 定义:用公有派生类对象替换基类对象; 理由:公有继承的派生类有基类中除构造函数和析构函数外的所有成员和相应的访问权限; 规则中的替换包括: 派生类的对象可以赋值给基类对象 派生类的对象可以初始化基类的引用 派生类对象的地址可以赋给指向基类的指针 虽然基类出现的地方可以用派生类来代替,但替代之后的派生类仅发挥基类的作用。 注:C++语言不允许使用基类对象给派生类对象赋值。 赋值兼容性是多态性的基础之一。 * 赋值兼容性规则: 定义:用公有派生类对象替换基类对象; 理由:公有继承的派生类有基类中除构造函数和析构函数外的所有成员和相应的访问权限; 规则中的替换包括: 派生类的对象可以赋值给基类对象 派生类的对象可以初始化基类的引用 派生类对象的地址可以赋给指向基类的指针 虽然基类出现
您可能关注的文档
- BPW500-16Q型喷雾泵泵组随机图册要点.doc
- BPM与泛微的比较 v2.0要点.ppt
- boys and girls 1(男孩子们和女孩子们)要点.ppt
- BP神经网络实验报告要点.doc
- BP神经网络在质量控制中的应用要点.doc
- BP神经网络及径向基神经网络对数据信号处理仿真要点.doc
- BP神经网络实现(Java代码)要点.doc
- BP神经网络的学习要点.doc
- BP神经网络的软测量和软件仿真要点.doc
- BP人工神经网络及matlab实现要点.ppt
- 浙江省温州市浙南名校联盟2025-2026学年高一上学期期中联考数学试题含解析.docx
- 26高考数学提分秘诀重难点34圆锥曲线中的定点、定值、定直线问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点35概率与统计的综合问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点31圆锥曲线中的切线与切点弦问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点30圆锥曲线中的弦长问题与长度和、差、商、积问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点29巧解圆锥曲线的离心率问题(举一反三专项训练)(全国通用)(含解析).docx
- 26高考数学提分秘诀重难点28直线与圆的综合(举一反三专项训练)(全国通用)(含解析).docx
- 寡核苷酸药物重复给药毒性研究技术指南.docx
- 重组溶瘤腺病毒生产质量管理标准.docx
- 26高考数学提分秘诀重难点27直线与圆中常考的最值与范围问题(举一反三专项训练)(全国通用)(含解析).docx
最近下载
- 充电桩采购安装项目供货方案.pdf VIP
- VA ONE用户手册目录.pdf VIP
- 皮类药材栽培技术杜仲栽培技术_培训课件.ppt VIP
- 2023年军队文职考试《数学2+物理》真题及答案.docx VIP
- (高清版)DB50∕T 646-2015 大黄绿色种植技术规程 .pdf VIP
- 充电桩采购安装应急预案.pdf
- 成人脓毒症患者医学营养治疗指南(2025版).pptx VIP
- 《输气管道工程设计规范》(GB 50251-2015).docx VIP
- 2024-2025学年上海七宝中学高一上学期数学月考试卷及答案(2024.12).docx VIP
- 中国旺旺控股有限公司环境、社会及管治报告 2022、2023.pdf VIP
原创力文档


文档评论(0)