版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、继承,第八章,回顾,友元现象 友元函数 友元类 运算符号重载 解决了什么问题 赋值运算符重载 一元运算符 二元运算符 其他运算符,目标,继承 访问控制 继承中的构造函数和析构函数 继承中的一种函数现象 函数覆盖,继承,继承是允许重用现有类来构造新类的特性,基类,方法和属性,优点,代码的可重用性类库 重定义基类的成员函数 向派生类添加新成员 不需要了解核心技术的细节,继承的例子,处理某企业中雇员的程序,使用一个箭头从派生类指向基类 表示派生类引用基类的函数和数据,而基类没有访问派生类的权限,继承的实现,派生类的声明必须指定基类的名称 派生类: 访问控制权限说明符 基类 class Manager
2、 : public Employee 任何类都能用作基类 基类分为两种类型 直接基类 间接基类,直接基类和间接基类,直接基类 class A ; class B : public A /A是B的直接基类 ; 间接基类 class A ; class B : public A ; class C : public B /A是c的间接基类 ;,继承的类型,单一继承,多级继承,层次继承,多重继承,单个类成员的访问规则,派生类访问控制 基本原则,派生类的函数 能够访问基类的保护和公有成员,派生类访问控制继承类型,继承类型示例,class A /基类 private: int privA; protec
3、ted: int protA; public: int pubA; ; class B : public A/公共派生类 public: void fn() int a; a = privA;/错误:不可访问 a = protA;/有效 a = pubA;/有效 ;,示例(续),class C : private A/私有派生类 public: void fn() int a; a = privA;/错误:不可访问 a = protA;/有效 a = pubA;/有效 ; void main() int m; B obj1; /公共私有派生类对象,示例(续),m = obj1.privA;/错
4、误:不可访问 m = tA;/错误:保护成员只继承给子类用,不可访问 m = obj1.pubA;/有效:B 是从 A 公共派生的 C obj2;/私有派生类的对象 m = obj2.privA;/错误:不可访问 m = tA;/错误:不可访问 m = obj2.pubA;/错误:不可访问 注意: 如果创建类时未给定访问说明符,则假定其为 private。,派生类的可访问性,有一种很轻松就能记住此表的方法: 派生类无权访问基类的 private 成员。 公有继承基类均不改变派生类从基类继承的成员的访问级别。 其它两个级别的继承使继承的成员与基类有相同的访问级别,
5、私有,保护,共有,保护,私有,子类成员,保护,保护,子类成员,保护,共有,Public继承,Protected 继承,private继承,私有,子类成员,多级继承,派生类的类型(即 public、private 或 protected)将影响派生类函数对多级继承中的基类的成员的访问 。,多级继承示例,类 B 从类 A 私有派生,类 C 依次从类 B 公有派生。 class A public : int a; ; class B : private A public : int b; void func_b() int x,y; x=a;/ 有效 y=b;/ 有效 ;,示例(续),class C
6、 : public B public : void func_c() int x,y; x=a;/ 无效 y=b; / 有效 ;,继承中的构造函数基本原则,当声明派生类的对象时, Derived obj; 它将会首先调用基类的构造函数,然后调用派生类的构造函数 问题 父类中可能有多个构造,子类如何确定使用那个构造呢? 在没有指定的情况下,使用父类的默认构造函数,如果父类正好没有默认构造,那就会出错了。 举例,继承中的构造函数如何选择,基类构造函数是在派生类构造函数之后指定的,使用冒号分隔 Derived(): Base() class Base protected: int a; public
7、: Base()a = 0;/默认构造函数 Base(int c) a = c; /单参数构造函数 ; class Derived : public Base public: Derived(): Base() /默认构造函数 也可简写成Derived() Derived(int c): Base(c) /单参数构造函数,如果不需要传参数给bade,则可写成Derived(int c)或者Derived(int c): Base() ;,继承中的析构函数,调用顺序与构造函数的调用顺序相反 首先调用派生类的析构函数,然后调用基类的析构函数 只有派生类的构造函数通过动态内存管理分配了内存空间时才需
8、要定义析构函数 如果派生类的构造函数没有动态内存分配,那么派生类的析构函数可以是一个空函数,调用成员函数 2-1,派生类的成员函数可以和基类中的成员函数同名 用基类的对象调用函数时,将调用基类的函数 使用派生类的对象时,将调用派生类的函数 派生类的成员函数要调用基类的同名函数,必须使用作用域解析操作符,调用成员函数 2-2,class Base protected: int ss; public: Base(); Base(int a) ss = a; void display() coutbase funendl; ;,class Derived : public Base public: Derived(); Derived(int b):Base() ss = b; void display() coutderived funendl; ; void main() Base b1(10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年建筑工程消防应急预案编制培训
- 极端高温下户外工作者的健康舆情引导
- 灵活用工管理协议书
- 临汾《网络安全师技能》培训试卷
- 海南省万宁市2025-2026学年七年级下学期5月期中生物试卷
- 美发护理趋势分析
- 肺脓肿患者的营养支持
- 26年临床试验随访规范
- 医学26年老年他汀类药物使用查房课件
- 医学26年:脑囊虫病诊疗要点 查房课件
- GB 4806.8-2022食品安全国家标准食品接触用纸和纸板材料及制品
- GB/T 36073-2018数据管理能力成熟度评估模型
- GB/T 24765-2009耐磨沥青路面用钢渣
- GB 4806.1-2016食品安全国家标准食品接触材料及制品通用安全要求
- ISO-37301-2021-合规管理体系要求及使用指南(中文版)
- 电子版-铁路货物运价规则
- 客源国概况-墨西哥课件
- 机电一体化专业毕业论文-
- 最新高中物理中常用的三角函数数学模型(强烈推荐)
- 多层厂房框架结构设计-混凝土结构课程设计
- 排架支撑结构搭设方案
评论
0/150
提交评论