第十章继承与派生
第10章 继承与派生

C++语言程序设计教程与实验
第十章
继承与派生
,也被继承下来,在生成对象时也要占据一定的内存 空间,造成资源浪费,我们可以对其进行改造。 (2) 改造基类成员 对基类成员的改造包括两方面,一是依靠派生类 的继承方式来控制基类成员的访问,二是对基类数据 成员或成员函数的覆盖,即在派生类中定义一个和基 类数据成员或成员函数同名的成员,由于作用域不同 ,产生同名覆盖,基类中的成员就被替换成派生类中 的同名成员。
C++语言程序设计教程与实验
第十章
继承与派生
需要注意的是
保护成员与私有成员唯一的不同是当发 生派生后,处在基类protected 区的成员可 被派生类直接访问,而私有成员在派生类中 是不可访问的。在同一类中私有成员和保护 成员的用法完全一样。 1.公有继承 派生类的其它成员可以直接访问基类的公有成员 和保护成员。其它外部使用者只能通过派生类的对象 访问继承来的公有成员。而无论是派生类的成员还是 派生类的对象,都无法访问基类的私有成员
C++语言程序设计教程与实验
第十章
继承与派生
派生类具有如下特点: (1) 新的类可在基类所提供的基础上包含新的成员; (2) 在新的类中可隐藏基类的成员函数; (3) 可为新类重新定义成员函数。
基类与派生类的关系如下: (1) 派生类是基类的具体化 (2) 派生类是基类定义的延续 (3) 派生类是基类的组合
C++语言程序设计教程与实验
第十章
继承与派生
vehicle(int in_wheels,float in_weight) {wheels=in_wheels;weight=in_weight;} int get_wheels(){return wheels;} float get_weight(){return weight;} }; class car:public vehicle 类的声明 { private: int passenger_load; public: 员 // 新 增 公 有 函 数 成 //新增私有数据成员 // 派 生 类 car
1. 继承与派生的概念。

1. 继承与派生的概念。
1. 继承的概念:继承是面向对象编程中的一个重要概念,它允许我们创建新的类,通过继承现有类的属性和方法来实现代码的重用。
在继承中,有两个类之间的关系,一个是称为父类或基类的类,另一个是称为子类或派生类的类。
子类继承了父类的属性和方法,并且可以根据需要添加自己的额外属性和方法。
继承的概念可以通过一个简单的例子来说明。
假设我们有一个父类叫做An i m a l,它有一个属性n a m e和一个方法s p e a k。
然后我们创建一个子类叫做C a t,它继承了A n i m a l类的属性和方法,并且可以添加自己的额外属性和方法。
通过继承,C a t类可以访问和使用A n i m a l类的属性和方法,同时也可以根据需要添加新的行为。
2.派生的概念:派生是指在继承的过程中创建子类的过程。
通过派生,我们可以基于父类创建新的子类,并且在子类中添加新的属性和方法来实现代码的扩展和重用。
派生可以看作是继承的一种具体实现方式。
派生的概念可以通过继续上面的例子来说明。
假设我们有一个C a t类作为子类,它继承了A n i m a l类作为父类。
在C at类中,我们可以添加额外的属性和方法,如c o l o r和c a t c h M o u s e。
通过派生,C a t类可以获得An i m a l类的属性和方法,并且可以根据需要添加自己的新行为。
3.继承与派生的关系:继承和派生是紧密相关的概念。
继承是指子类从父类继承属性和方法的过程,以实现代码的重用。
而派生是指在继承的过程中创建子类,并且在子类中添加新的属性和方法的过程,以实现代码的扩展。
继承和派生的关系可以通过一个更复杂的例子来说明。
假设我们有一个基类叫做S h a p e,它有一个属性co l o r和一个方法d r a w。
然后我们创建两个子类,一个是C i r c l e,另一个是R e c t a n g l e,它们分别继承了S h a p e类,并且可以根据需要添加自己的额外属性和方法。
《继承与派生 》课件

目录
CONTENTS
• 继承与派生的基本概念 • 继承的方式 • 派生类的构造函数和析构函数 • 继承与多态 • 继承与重载
01
继承与派生的基本 概念
继承的定义
继承是面向对象编程中的一个重 要概念,它允许一个类(子类) 继承另一个类(父类)的属性和
方法。
通过继承,子类可以复用父类的 代码,减少代码冗余,提高代码
保护继承
总结词
保护继承是指基类的保护成员在派生类 中保持保护属性,可以被派生类和派生 类的对象访问。
VS
详细描述
保护继承时,基类的保护成员在派生类中 保持保护属性,可以被派生类和派生类的 对象访问。这种继承方式使得基类的保护 成员成为派生类的保护成员,可以被派生 类和派生类的对象访问。因此,派生类可 以继承基类的保护成员函数和变量。
03
派生类的构造函数 和析构函数
派生类的构造函数
派生类构造函数的作用
派生类构造函数用于初始化派生类对象,包括调用基类构造函数 和执行派生类特有的初始化操作。
派生类构造函数的执行顺序
派生类构造函数的执行顺序是在创建派生类对象时,先调用基类构 造函数,然后执行派生类构造函数体中的代码。
派生类构造函数的参数
继承和派生共同实现 了面向对象编程中的 代码复用和多态性。
派生是继承的一种表 现形式,通过派生可 以创建新的类。
02
继承的方式
公有继承
总结词
公有继承是ቤተ መጻሕፍቲ ባይዱ基类的公有成员在派生类中仍为公有成员,可以被派生类和派生类的对象访问。
详细描述
公有继承时,基类的公有成员在派生类中保持公有属性,派生类可以访问基类的公有和保护成员。这种继承方式 使得基类的公有成员成为派生类的公有成员,可以被派生类和派生类的对象直接访问,因此派生类可以继承基类 的公有成员函数和变量。
继承与派生类答案

继承与派生类知识要点1.掌握继承和派生的定义,派生类的定义方法。
(1)掌握继承的两种类型:单继承和多继承。
(2)掌握private,public,protected三种继承方式的特点。
继承方式决定了基类中的成员在派生类中的属性。
三种继承方式的共同点:基类的private成员在派生类中不可见。
区别:对于私有继承,基类的public、protected成员在派生类中作为private成员;对于公有继承,基类的public、protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。
(3)掌握派生类中的构造函数和析构函数的使用。
基类的构造函数和析构函数不能继承,所以必要时在派生类中定义自己的构造函数和析构函数。
派生列的构造函数完成基类中新增数据成员和基类数据成员的初始化,基类数据成员的初始化通过基类构造函数来实现。
(4)掌握派生类的同名覆盖规则。
(5)掌握赋值兼容规则。
基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;基类类型指针可以指向派生类对象。
2.掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序。
派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),在执行对象成员所在类的构造函数(顺序按照他们在类中的声明顺序),最后执行派生类构造函数体中的内容。
3.掌握虚基类的概念和定义方法。
在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。
典型例题分析与解答例题1:下列对派生类的描述中,()是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。
c++10 继承与派生

的
{X=xx; Y=yy;}
访 void Move (float xOff, float yOff)
问
{X+=xOff; Y+=yOff;}
控 制
float GetX() {return X;}
float GetY() {return Y;} private: //私有数据成员
问 控
float GetX() {return Point::GetX();} float GetY() {return Point::GetY();} float GetH() {return H;}
制
float GetW() {return W;}
private: //新增私有数据
float W,H;
访 派生类中的成员函数可以直接访问基
问 控 制
类中的public和protected成员,但 不能直接访问基类的private成员。
通过派生类的对象不能直接访问基类 中的任何成员。
16
例 私有继承举例
类 class Rectangle: private Point //派生类声明
成 {public:
的 注意:基类的private成员不能转化为派生类
访 的任何成员。
问 控
派生类中的成员函数可以直接访问基类中的 public和protected成员,但不能直接访问基
类的private成员。
制 通过派生类的对象只能访问基类的public成
员。
12
例 公有继承举例
类 成 员
class Point //基类Point类的声明 {public: //公有函数成员
《继承和派生》课件

派生类的析构函数
派生类析构函数在销毁派生类对象时 自动调用,用于释放派生类所占用的 资源。
派生类析构函数可以包含代码,用于 清理派生类所占用的资源。
派生类析构函数可以访问基类的析构 函数,通过使用`this`关键字调用基类 析构函数。
派生类析构函数可以重载基类析构函 数,以便在销毁派生类对象时执行特 定的操作。
基类析构函数的调用
在派生类的析构函数中,可以通过使用`this`关键字调 用基类的析构函数,以确保基类资源得到正确释放。
输标02入题
如果在派生类的析构函数中没有显式调用基类的析构 函数,则编译器会自动调用基类的默认析构函数。
01
03
在某些情况下,可能需要显式调用基类的析构函数, 以确保资源得到正确释放。例如,当基类包含动态分
02 继承的方式
公有继承
总结词
公有继承是指子类可以访问父类的公有成员。
详细描述
在公有继承中,子类可以访问父类的公有成员(即不加任 何修饰符的成员),这些成员在子类中保持公有属性。子 类可以继承和使用父类的公有成员,包括函数、变量、常 量等。
总结词
公有继承是实现代码复用的一种方式。
详细描述
通过公有继承,子类可以继承父类的公有成员,从而避免 重复编写相同的代码。这有助于提高代码的复用性和维护 性。
注意事项
虚函数和纯虚函数的使用 应合理规划,避免过度使 用导致程序复杂度和维护 成本增加。
继承和派生的效率问题
继承
通过共享已存在的代码, 减少代码冗余。但也可能 导致内存浪费和性能下降 。
派生
通过扩展已有类,增加新 功能或修改已有功能。但 也可能导致内存消耗增加 和性能下降。
注意事项
继承与派生

Empolyee(类名)
属性
ProgrammerClass(类名)
属性
+name:string + sex:string + heigh:double
+name:string + sex:string + heigh:double +language:string +datebase:string
服务(动作) 输入信息 显示信息
作业
• 定义一个日期类,继承自时钟类,新增年月日 属性,完善输入与输出方法.
总结
1、面向对象的继承机制; 重用现有类去创建新类的特性. 2、面向对象继承的实现; 利用[类的修饰符]class 类名:基类名 {} 注意:构造函数与析构函数不被继承 3、隐藏和访问基类的成员。 利用base关键字访问基类的成员,利用 sealed 密封类,利用new隐藏基类的成员.
class ProgrammerClass:EmployeeClass { private string language; private string databases; public ProgrammerClass():base()//引用基类的构造函数 public void AcceptSkillSet() {base.AcceptDetails ();//调用基类的方法 Console.WriteLine ("请输入所掌握的编程语言"); language=Console.ReadLine (); Console.WriteLine ("请输入所掌握的数据库"); databases=Console.ReadLine ();} public void DisplaySkillSet() {base.DisplayDetails ();//调用基类的方法 Console.WriteLine ("{0}所掌握的编程语言{1}", ,nguage ); Console.WriteLine ("{0}所掌握的数据库是{1}", ,this.databases );} }
c课程设计继承与派生

c 课程设计继承与派生一、教学目标本章节的教学目标是让学生掌握C语言中继承与派生的概念,理解并能够运用继承与派生编写C++程序。
具体目标如下:1.知识目标:理解继承与派生的概念及其在C++程序设计中的应用。
掌握继承与派生的基本语法和用法。
2.技能目标:能够运用继承与派生编写C++程序,解决实际问题。
能够分析并修改现有程序中的继承与派生相关问题。
3.情感态度价值观目标:培养学生的编程思维,提高学生对C++程序设计的兴趣。
培养学生的团队协作能力,鼓励学生在课堂上积极互动、交流。
二、教学内容本章节的教学内容主要包括以下部分:1.继承与派生的概念及其作用。
2.继承与派生的基本语法和用法。
3.继承与派生在实际编程中的应用案例。
具体的教学大纲如下:1.第一课时:介绍继承与派生的概念及其作用。
2.第二课时:讲解继承与派生的基本语法和用法。
3.第三课时:通过案例分析,让学生掌握继承与派生在实际编程中的应用。
三、教学方法为了提高教学效果,本章节将采用以下教学方法:1.讲授法:讲解继承与派生的概念、语法和用法。
2.案例分析法:分析实际编程中继承与派生的应用,让学生更好地理解知识点。
3.实验法:让学生动手编写代码,巩固所学知识,提高实际编程能力。
四、教学资源为了支持本章节的教学,我们将准备以下教学资源:1.教材:《C++程序设计》等相关教材。
2.参考书:提供一些关于继承与派生的相关论文和书籍,供学生自主学习。
3.多媒体资料:制作PPT、视频等多媒体资料,帮助学生更好地理解知识点。
4.实验设备:提供计算机实验室,让学生能够动手编写代码,进行实验。
五、教学评估为了全面、客观地评估学生在学习C课程中继承与派生章节的学习成果,我们将采取以下评估方式:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和理解程度。
2.作业:布置与继承与派生相关的编程作业,评估学生对知识点的掌握和运用能力。
3.考试:安排一次期中考试,测试学生对继承与派生知识点的理解和运用能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意问题
• 派生类的构造函数名与派生类名相同。在派生类构造函数的参数表中,给出 派生类的构造函数名与派生类名相同。在派生类构造函数的参数表中, 了初始化基类的数据成员、新增对象的数据及新增数据成员所需要的参数。 了初始化基类的数据成员、新增对象的数据及新增数据成员所需要的参数。 • 在派生类参数表之后,列出需要使用参数进行初始化的基类名和成员对象名 在派生类参数表之后, 及各自的参数表,各项之间使用逗号分隔。 及各自的参数表,各项之间使用逗号分隔。 • 这里基类名,对象名之间的顺序可以是任意的。在生成派生类对象时,系统 这里基类名,对象名之间的顺序可以是任意的。在生成派生类对象时, 会首先使用这里列出的参数,按基类,内嵌对象,派生类的顺序, 会首先使用这里列出的参数,按基类,内嵌对象,派生类的顺序,调用相应 的构造函数。 的构造函数。 • 当一个类同时有多个基类时,对于所有需要给予参数进行初始化的基类,都 当一个类同时有多个基类时,对于所有需要给予参数进行初始化的基类, 要显式给出基类名和参数表; 要显式给出基类名和参数表; • 若派生类的基类也是派生类时,每个派生类只需负责直接基类的构造函数 若派生类的基类也是派生类时, • 对于使用缺省构造函数的基类,可以不给出类名和参数表。同样,对于对象 对于使用缺省构造函数的基类,可以不给出类名和参数表。同样, 成员,如果是使用缺省构造函数,也不需要写出对象名和参数表。 成员,如果是使用缺省构造函数,也不需要写出对象名和参数表。 • 如果基类定义了带有形参表的构造函数时,派生类必须定义构造函数,提供 如果基类定义了带有形参表的构造函数时,派生类必须定义构造函数, 一个将参数传递给基类构造函数的途径, 一个将参数传递给基类构造函数的途径,保证在基类进行初始化时能够获得 必要的数据。 必要的数据。 • 如果基类没有定义构造函数,派生类也可以不定义构造函数,全部采用缺省 如果基类没有定义构造函数,派生类也可以不定义构造函数, 的构造函数,这时新增成员的初始化工作可以用其他公有函数来完成。 的构造函数,这时新增成员的初始化工作可以用其他公有函数来完成。
派生类构造函数执行次序
• 派生类构造函数执行的一般次序如下 派生类构造函数执行的一般次序如下: •调用基类构造函数,调用顺序按照定义派生 调用基类构造函数, 调用基类构造函数 调用顺序按照定义派生 类时,基类被继承时声明的顺序(从左向右) 类时 , 基类被继承时声明的顺序 ( 从左向右 ) 。 •调用对象成员的构造函数,调用顺序按照它 调用对象成员的构造函数, 调用对象成员的构造函数 们在派生类中声明的顺序。 们在派生类中声明的顺序。 •派生类的构造函数体中的内容。 派生类的构造函数体中的内容。 派生类的构造函数体中的内容
派生类构造函数的格式
派生类构造函数名(参数表) 派生类构造函数名(参数表): 基类构造函数名1 参数表1 基类构造函数名1(参数表1),…,基类构造函数名n(参数表n),… ,基类构造函数名n 参数表n 对象成员名1 参数表1 对象成员名n(参数表n) 对象成员名1(参数表1),…对象成员名n(参数表n) 对象成员名n(参数表 { 派生类新增成员初始化) (派生类新增成员初始化) } *构类造函数与所属类同名
继承与派生
继承性在计算机软件开发过程中就表现为软件 程序的重用性和可扩充性。C++语言中的继承与派 生机制允许在原有类的基础上进行新的,更具体类 的定义 。 基本概念 派生类的定义与继承方式 派生类的构造函数 派生类的析构函数 虚基类 类成员的访问 赋值兼容规则 习题
• • • • • • • •
基本概念
派生类对基类的继承方式
• 派生类对基类的继承方式(继承权限指明符 )有 继承权限指明符 public(公有继承)、protected(保护继承)和 private(私有继承)三种 • 派生类继承 继承成员的访问属性在派生的过程中是可以调整 继承 的,派生类对基类的继承方式控制了基类中具有不同访 问属性的成员在派生类中的访问属性。 • 这里说的访问主要指: • 派生类新增成员函数对从基类继承来的成员访问 • 在派生类外部(非类族内的成员),通过派生类的 在派生类外部(非类族内的成员) 对象对从基类继承来的成员的访问。 对象对从基类继承来的成员的访问。 • 类外的函数(包括main函数和其它类的函数)对 类外的函数(包括main函数和其它类的函数) main函数和其它类的函数 从基类继承来的成员的访问。 从基类继承来的成员的访问。
派生类的定义与继承方式
• 派生类的定义格式 • 公有继承 公有继承public • 私有继承 私有继承private • 保护继承 保护继承protected • 小结: 小结:
派生类的定义格式
派生类名: 基类1 class 派生类名 : 继承方式 基类 1 , 继承方式 基类 基类n 2,…,继承方式 基类n , { 派生类成员定义; 派生类成员定义; }; 注意: • 每一种继承方式只限定紧跟其后的基类的访问性质。 • 继承方式的缺省方式是私有继承(private)。 • 继承方式的不同决定了对基类成员的访问性质。
直接基类与间接基类
• 派生出来的新类同样可以作为基类继续 派生出新的类。 派生出新的类。 • 直接派生出新类的基类称为直接基类 • 新类的基类的基类或更上层的基类称为 新类的间接基类。 新类的间接基类。
单继承与多继承
• 一个派生类只有一个直接基类,这种继 承称为单继承 单继承; 单继承 • 一个派生类有多个直接基类,这种继承 称为多继承 多继承。 多继承 • 一个基类也可以有多个派生类。一个父 类的特征,可以同时被多个子类继承。 这样,就形成了一个相互关联的继承和 派生的类的家族,有时也称作类族 类族。 类族
派生类的构造函数
• • • • • • 派生类的构造函数作用 派生类构造函数的格式 派生类构造函数执行次序 注意问题: 单继承举例 多继承举例
派生类的构造函数作用
• 类的派生过程中,基类的构造函数并没有继承下 来,要完成派生类对象的数据成员的初始化工作, 就必须给派生类添加新的构造函数。 • 派生类的数据成员组成: • 派生类继承的所有基类的数据成员; 派生类继承的所有基类的数据成员; 继承的所有基类的数据成员 • 派生类新增的数据成员; 派生类新增的数据成员; • 派生类新增成员中内嵌的其他类的对象,派 派生类新增成员中内嵌的其他类的对象, 生类的数据成员中实际上还间接包括了这些 对象的数据成员。 对象的数据成员。 • 构造派生类的对象时,就要对派生类继承的所有 基类数据成员、新增数据成员和成员对象的数据 成员进行初始化。
公有继承public
• 派生类中的公有成员包括基类部分的公有成员和新定义 的公有成员,保护成员包括基类部分的保护成员和新定 义的保护成员,私有成员仅为新定义部分的私有成员。 私有成员仅为新定义部分的私有成员。 私有成员仅为新定义部分的私有成员 派生类成员可以直接访问他们( 私有成员); 派生类成员可以直接访问他们(公有,保护,私有 私有 ) • 在派生类外部,派生类对象,外部函数(普通和类外函 派生类对象, 派生类对象 数)可以直接访问派生类的公有成员(包括继承过来的 派生类的公有成员( 派生类的公有成员 包括继承过来的 基类的公有成员); • 不能通过基类对象和派生类对象访问继承过来的基类保 护成员(不能通过类对象访问类的保护,私有 私有成员); 护成员(不能通过类对象访问类的 私有 ) • 派生类新增成员函数和外部函数(普通和类外函数)不 能直接 直接访问继承过来的 继承过来的基类私有成员;但可以通过继承 直接 继承过来的 继承 过来的基类的公有成员函数或保护成员函数进行访问。 过来的 • 例见备注页
保护继承protected
• 派生类中的公用成员仅为新定义部分的公用成员, 派生类中的公用成员仅为新定义部分的公用成员, 保护成员包括基类部分的公用成员和保护成员以 及新定义部分的保护成员, 及新定义部分的保护成员,私有成员仅为新定义 部分的私有成员。派生类成员可以直接访问; 部分的私有成员。派生类成员可以直接访问; • 在派生类外部,派生类对象,外部函数(普通和 在派生类外部,派生类对象,外部函数( 类外函数)不能直接访问保护 保护继承过来的基类的 类外函数)不能直接访问保护继承过来的基类的 公有成员和保护成员;但可以通过派生类的公有 公有成员和保护成员;但可以通过派生类的公有 成员函数进行访问。 进行访问 成员函数进行访问。 • 派生类新增成员和对象,外部函数(普通和类外 派生类新增成员和对象,外部函数( 新增成员和对象 函数)不能直接访问保护 保护继承过来的基类私有成 函数)不能直接访问保护继承过来的基类私有成 但可以通过保护继承过来的基类的公有成员 员;但可以通过 继承过来的基类的公有成员 函数和保护成员函数间接 间接访问继承过来的基类的 函数和保护成员函数间接访问继承过来的基类的 私有成员。 私有成员。 • 例见备注页
派生类成员
• 派生类继承了基类的全部数据成员和除了构 造、析构函数之外的全部函数成员 。 • 派生类中的所有继承基类的数据成员和成员 派生类继承成员; 函数称为派生类继承成员 派生类继承成员 • 派生类中除继承基类的数据成员和成员函数 外,所有的新增加数据成员和成员函数称为 派生类新增成员。 派生类新增成员 • 派生类的继承成员和派生类新增成员统称派 派 生类成员。 生类成员
• • • • • 派生与继承 直接基类与间接基类 单继承与多继承 派生类成员 派生类对基类的继承方式
派生与继承
• 在原有类的基础上创建新类的过程称为原有类派生 原有类派生 出新类,简称派生 派生; 出新类 派生 • 新类的特征(数据成员)和功能(成员函数)中保 留原有类的一些特征和功能的性质称为新类对原有 新类对原有 类的继承, 继承。 类的继承,简称继承 继承 • 原有类称为基类或父类,新类称为派生类,导出类 或子类。 • 子类能够继承父类的全部特征,包括所有的数据成 员和成员函数,并且子类还能够定义父类所没有的、 属于自己的特征,即自己的数据成员和成员函数。 • 通过类的继承关系,使得基类的代码可以为新定义 的派生类所重用,论是继承还是新增的)能够访问该类中具有任何 直接派生类的成员函数(无论是继承还是新增的) 访问权限的成员, 访问权限的成员,同时也能够访问其他类中具有公用访问权限的成员和类外 的对象与函数,但不能访问其他类中的保护成员和私有成员, 的对象与函数,但不能访问其他类中的保护成员和私有成员,即使其他类是 自己继承的类,或自己成员所属的类。 自己继承的类,或自己成员所属的类。 • 派生类作为新的基类,继续派生时,应注意: 派生类作为新的基类,继续派生时,应注意: • 假设B类以私有方式继承了A类后,B类又派生出C类,那么C类的成员和对象都 假设B 以私有方式继承了 类后, 类又派生出C 继承了A 那么C 不能直接访问从A类中间接继承来的任何成员。 不能直接访问从A类中间接继承来的任何成员。 • 如果B类是以保护方式继承了A类,那么A类中的公有和保护成员在B类中都是 如果B类是以保护方式继承了A 保护方式继承了 那么A类中的公有和保护成员在B 保护成员。 类再派生出C类后, 类中的公有和保护成员被C类间接继承后, 保护成员。B 类再派生出C 类后,A类中的公有和保护成员被C类间接继承后, 有可能是保护的或者是私有的。 类的成员只可以访问间接从A类中保护方式 有可能是保护的或者是私有的。C类的成员只可以访问间接从A 类中保护方式 继承来的成员。 继承来的成员。 • 每个派生类对象所占有的存储空间的大小等于其基类部分的所有数据成员占 有的存储空间的大小与新定义部分的所有数据成员占有的存储空间大小的总 并且前面的存储空间分配给基类部分的数据成员使用, 和,并且前面的存储空间分配给基类部分的数据成员使用,后面的存储空间 分配给新定义部分的数据成员使用。 分配给新定义部分的数据成员使用。