A的外的出》净的出《的要的《图的《的气
教学内容: 121继承的概念 122派生类 123二义性问题 124赋值兼容规则 C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 2 教学内容: 12.1 继承的概念 12.2 派生类 12.3 二义性问题 12.4 赋值兼容规则
教学要求: 团能通过继承已有的类建立新类 区掌握继承的三种方式:公有、保护、私有继承 区掌握派生类和基类的概念; 区掌握派生类的构造函数和析构函数; 区理解多重继承和虚基类 C++程序设计课件设计制作:徐龙琴 3
C++程序设计课件 设计制作:徐龙琴 3 能通过继承已有的类建立新类 掌握继承的三种方式:公有、保护、私有继承 掌握派生类和基类的概念; 掌握派生类的构造函数和析构函数; 理解多重继承和虚基类 教学要求:
§121继承的概念 继承是面向对象程序设计的基本特征之一,它允许在原类的 基础上创建新类,新类即可从一个或多个原类中继承(共享)其 函数和数据,也可以重新定义原类中没有的数据和函数。故通过 类的“继承”,可将原来的程序代码重复使用,从而减少了程序 代码的冗余度,提高了编程的效率。 类的继承是新类从已有类那里得到已有的特性。从已有类产 生新类的过程就是类的派生。在继承过程中,原类称为基类或 父类,而由类派生的新类则称为派生类或子类。派生新类的过 程包括吸收基类的成员、调整基类成员和添加新的成员三步 C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 4 §12.1 继承的概念 继承是面向对象程序设计的基本特征之一,它允许在原类的 基础上创建新类,新类即可从一个或多个原类中继承(共享)其 函数和数据,也可以重新定义原类中没有的数据和函数。故通过 类的“继承” ,可将原来的程序代码重复使用,从而减少了程序 代码的冗余度,提高了编程的效率。 类的继承是新类从已有类那里得到已有的特性。从已有类产 生新类的过程就是类的派生。在继承过程中,原类称为基类或 父类,而由类派生的新类则称为派生类或子类。派生新类的过 程包括吸收基类的成员、调整基类成员和添加新的成员三步
据派生类所拥有的基类数目不同,可以分为: 单继承:一个类只有一个直接基类时,称为单继承 多继承:一个类同时有多个直接基类时,则称为多继承 基类与派生类之间的关系如下: ①基类是对派生类的抽象,派生类是对基类的具体化 ②派生类是基类的组合。多继承可看作是多个单继承的简 单组合。 ③新类也可作为基类再派生新类,且一个基类可同时派生出 多个派生类。基类的基类甚至更高层的基类称为间接基类 ④派生类可对一些继承来的函数重新定义,以适应新的要求 ⑤派生类包含了它所有基类中除构造和析构函数之外的所有成员。 C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 5 据派生类所拥有的基类数目不同,可以分为: 单继承:一个类只有一个直接基类时,称为单继承 多继承:一个类同时有多个直接基类时,则称为多继承 基类与派生类之间的关系如下: ① 基类是对派生类的抽象,派生类是对基类的具体化 ② 派生类是基类的组合。多继承可看作是多个单继承的简 单组合。 ③ 新类也可作为基类再派生新类,且一个基类可同时派生出 多个派生类。基类的基类甚至更高层的基类称为间接基类 ④派生类可对一些继承来的函数重新定义,以适应新的要求 ⑤ 派生类包含了它所有基类中除构造和析构函数之外的所有成员
§122派生类 1派生类的定义格式: class派生类名:继承方式基类名1,…继承方式基类名n 派生类新成员声明;/与前面声明一个类时完全相同 继承方式:指定了派生类成员以及类外对象对于从基类 例:假设基类Base1,Base2是已声明的类,声明一个名为Dr1的 派生类,该猫魇奎奥盛忌的权曝生裔来种继承方式: class drl:pu映lge鼻示公线 派生类射熄声示私有继承,是默认方式; protected:表示保护继承。 C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 6 §12.2 派生类 ⒈派生类的定义格式: class 派生类名:继承方式 基类名1,…继承方式 基类名n { 派生类新成员声明; //与前面声明一个类时完全相同 }; 例: 假设基类Base1,Base2是已声明的类,声明一个名为Dr1的 派生类,该类从基类Base1,Base2派生而来: class Dr1:public Base1,private Base2 { 派生类新成员声明; }; 继承方式:指定了派生类成员以及类外对象对于从基类 继承来的成员的访问权限。有三种继承方式: public:表示公有继承; private:表示私有继承,是默认方式; protected:表示保护继承
下表是不同继承方式的基类在派生类中的访问权限 继承方式 基类特性继承后在派生类特性 public public 公有继承 protected protected private 不可访问 public private 私有继承 protected private private 不可访问 public protecte 保护继承 protected protected private 不可访问 C++程序设计课件设计制作:徐龙琴 7
C++程序设计课件 设计制作:徐龙琴 7 下表是不同继承方式的基类在派生类中的访问权限 继承方式 基类特性 继承后在派生类特性 公有继承 public public protected protected private 不可访问 私有继承 public private protected private private 不可访问 保护继承 public protected protected protected private 不可访问
从上表可以看出: ①公有继承时:基类成员的访问权限在派生类中不变。于是派 生类的其他成员可以直接访问继承来的公有和 保护成员。其他外部使用者只能通过派生类的 对象访问继承来的公有成员 ②保护继承时:基类成员的访问权限在派生类中全变为保护的 访问方式。于是派生类的其他成员可直接访 问从基类继承来的公有和保护成员,但在类外 部通过派生类的对象无法访问它们 C++程序设计课件设计制作:徐龙琴 8
C++程序设计课件 设计制作:徐龙琴 8 从上表可以看出: ①公有继承时:基类成员的访问权限在派生类中不变。于是派 生类的其他成员可以直接访问继承来的公有和 保护成员。其他外部使用者只能通过派生类的 对象访问继承来的公有成员 ②保护继承时:基类成员的访问权限在派生类中全变为保护的 访问方式。于是派生类的其他成员可直接访 问从基类继承来的公有和保护成员,但在类外 部通过派生类的对象无法访问它们
③私有继承时:基类成员的访问权限在派生类中全变为私有的访 问方式 ④基类中私有成员在派生类中是隐藏的,只能在基类内部访问。 ⑤派生类中的成员不能访问基类中的私有成员,可以访问基类 中的公有成员和保护成员 ⑥派生类中用“类名:成员”访问基类成员 ⑦若派生类定义了与基类同名的成员,若要在派生类中使用基 类同名成员,可用:类名:成员 ⑧派生类对基类的静态成员的访问用:类名::成员 C++程序设计课件设计制作:徐龙琴
C++程序设计课件 设计制作:徐龙琴 9 ③私有继承时:基类成员的访问权限在派生类中全变为私有的访 问方式 ④ 基类中私有成员在派生类中是隐藏的,只能在基类内部访问。 ⑤ 派生类中的成员不能访问基类中的私有成员,可以访问基类 中的公有成员和保护成员 ⑥ 派生类中用“类名 :: 成员”访问基类成员 ⑦ 若派生类定义了与基类同名的成员,若要在派生类中使用基 类同名成员,可用:类名 :: 成员 ⑧ 派生类对基类的静态成员的访问用:类名 :: 成员
2.派生类的构造函数: 派生类的数据成员由所有基类的数据成员与派生类新增 的数据成员共同组成,如果派生类新增成员中包括其他类的 对象(子对象),派生类的数据成员中实际上还间接包括了 这些对象的数据成员。因此,构造派生类的对象时,必须对 基类数据成员、新增数据成员和成员对象的数据成员进行初 始化。派生类的构造函数必须要以合适的初值作为参数,隐 含调用基类和新增对象成员的构造函数,来初始化它们各自 的数据成员,然后再加入新的语句对新增普通数据成员进行 初始化。 C++程序设计课件设计制作:徐龙琴 10
C++程序设计课件 设计制作:徐龙琴 10 ⒉派生类的构造函数: 派生类的数据成员由所有基类的数据成员与派生类新增 的数据成员共同组成,如果派生类新增成员中包括其他类的 对象(子对象),派生类的数据成员中实际上还间接包括了 这些对象的数据成员。因此,构造派生类的对象时,必须对 基类数据成员、新增数据成员和成员对象的数据成员进行初 始化。派生类的构造函数必须要以合适的初值作为参数,隐 含调用基类和新增对象成员的构造函数,来初始化它们各自 的数据成员,然后再加入新的语句对新增普通数据成员进行 初始化