- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序设计语言;派生类的概念
派生类的构造和析构
基类成员在派生类中访问属性
多重继承
基类和派生类间的赋值兼容关系;继承是面向对象的一个重要特性
在已有类(父类或基类)基础上构造新类(保留、重定义、新增)
已有类:父类或基类
新类:派生类或子类
类的层次或等级的体现
;1、为什么使用继承
什么是继承??
从先辈初得到属性和行为特征。
类的继承:新类从已有类得到已有的特征
为什么要使用继承
继承性是自然世界的特性
在程序设计中代码重用,节省成本
;;;;CPerson;构造派生类的3部分工作
1、派生类从基类中接收成员
全部成员(除构造、析构函数外)接收
2、调整从基类接收来的成员
(1)改变基类成员在派生类中的访问属性 ?类声明继承方式来控制
(2)派生类对基类成员进行重新定义 重载Vs覆盖
3、派生类中增加新的成员
继承和派生机制的核心
注意:继承中,构造和析构函数不能被继承;private;一般类中:public protected private
类内:随便访问
类外:对象只能访问public成员
问题?
派生类对基类成员访问如何进行?;(1)内部访问
派生类新增成员对基类成员的访问
(2)对象访问
派生类对象对基类成员的访问;(1)私有继承class A:private B
基类public、protected?private
内部访问:可以直接访问
外部访问:不能直接访问
(2)公有继承class A:public B
基类public、protected?public 、protected
内部访问:可以直接访问
外部访问:只有public能被访问
(3)保护继承 class A :protected B
基类public、protected?protected
内部访问:可以直接访问
外部访问:不能直接访问;基类的构造和析构函数不能被继承
新的构造函数,可由系统提供,也可用户自定义
注意:派生类的构造函数除了对新增成员初始化,还要对基类成员初始化(由基类构造函数完成)。
怎么来设计,又怎么来运行?;;;;派生类中的析构函数用来清理新增成员
基类成员由基类析构函数清理
析构函数无参,派生类中析构函数设计与基类无关;1、同名成员
覆盖的成员现身
2、访问声明
让私有的成员现身;派生类中成员与基类成员名相同。
被称为派生类成员覆盖了积累的同名成员
派生类中使用基类被覆盖的成员
基类名::成员名
;;public继承,不影响继承自基类参量和函数访问权限
protected和private继承,缩小了访问权限
类产生对象无法访问基类成员
只能通过子类public接口访问;;访问声明的方法:
将基类的保护成员或公有成员直接写到私有派生类定义中的同名段中,冠以基类名::。
注意:
数据成员和成员函数都可以使用访问控制
访问声明中只含不带类型和参数的函数名和变量名
访问声明不能改变成员在基类中的访问属性
对于基类中的重载函数名,访问声明对所有同名函数起作用。慎重;多重继承的声明
class 派生类名:继承方式1 基类1,继承方式2 基类2,……
{// 派生类新增数据成员和函数 }
例如:class A{} ; class B{} ; class C{};
class D:public A , protected B , private C{ };;;多重继承的二义性;派生类构造函数
派生类名(参数总表):基类名1(参数列表1),基类名2(参数列表2),…………..
{//派生类新增成员的初始化语句}
构造顺序:
先基类构造 , 按照指定顺序进行
再派生类构造
析构顺序:
先析构派生类
在析构基类 ,按构造相反的顺序;先看一个问题;class 派生类名 :virtual 继承方式 基类名{ };
作用:
当基类通过多条路径被一个派生类继承时,该派生类只继承该基类一次,基类成员只保留一次;;虚基类的初始化一般与多重继承的初始化语法上一样
但是 构造函数的调用顺序不同。需要注意:
1、虚基类中定义带形参的构造函数,且没有默认形式构造函数,哪么,直接或间接派生类必须在构造函数的成员初始化列表中列出对虚基类构造函数的调用。
2、建立对象时,对象中含有从虚基类继承的成员,则虚基类的成员由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。该派生类的其他基类对虚基类构造函数的调用都自动被忽略。
3、同一层次中,同时包含虚基类和非虚基类,先调用虚基类构造函数,在调用其他非虚基类构造,最后调
文档评论(0)