第11章 丝水和派生
2021/2/24 1 第11章 继承和派生类
继承 问题的提出一个类的子类,能否通过原来的 类来简化程序设计,提高软件的重用性,并使 软件更容易维护。 基本概念 类A继承了类B定义类A时使用了已定义类B的 部分或全部成员。类B称为基类或父类,类A 称为派生类或子类 类树派生类作为另一个类的基类,基类再派生 出若干派生类,即构成类树。 2021/224
2021/2/24 2 继承 问题的提出 一个类的子类,能否通过原来的 类来简化程序设计,提高软件的重用性,并使 软件更容易维护。 基本概念 •类A继承了类B 定义类A时使用了已定义类B的 部分或全部成员。类B称为基类或父类,类A 称为派生类或子类。 •类树 派生类作为另一个类的基类,基类再派生 出若干派生类,即构成类树
如关于雇员和车辆的层次关系: Employe(员) TEacher(教师)Ore政) Worker(工人 Ⅴ chicle((车辆) Car(汽车) Sportscar(赛车) 2021/224
2021/2/24 3 如关于雇员和车辆的层次关系: Teacher(教师) Officer(行政) Worker(工人) Employee(雇员) Car(汽车) Sportscar(赛车) Vehicle(车辆)
对派生类可作如下几个工作: 1全部或部分地继承基类的成员数据或成员函数; 2增加新的成员变量; 3增加新的成员函数; 4重新定义已有的成员函数 5改变现有的成员属性。 C+中两种继承:单一继承和多重继承。如下图所示。 在校人员类 学生类职工类 学生类 职工类 在校人员类 2021/224 单一继承 多重继承
2021/2/24 4 对派生类可作如下几个工作: 1.全部或部分地继承基类的成员数据或成员函数; 2.增加新的成员变量; 3.增加新的成员函数; 4.重新定义已有的成员函数; 5.改变现有的成员属性。 C++中两种继承:单一继承和多重继承。如下图所示。 在校人员类 学生类 职工类 学生类 职工类 在校人员类 单一继承 多重继承
单一继承 派生类定义方式 class派生类类名:基类类名 i public ●●● ∥公有成员说明 protected: ∥护成员说明 p rivate /有成员说明 2021/224 5
2021/2/24 5 派生类定义方式 class 派生类类名:基类类名 { public: … //公有成员说明 protected: … //保护成员说明 private: … //私有成员说明 }; 单一继承
注 1 Access l可选,为基类中的成员在派生类中规定访问权 限 可选 public、 private、 protected之一。缺省时约定为 public 2. Access public时,派生类称为公有派生;为 private 时,称私有派生;为 protected时,称保护派生。 2021/224 6
2021/2/24 6 注: 1.Access可选,为基类中的成员在派生类中规定访问权 限。 可选public、private、protected之一。缺省时约定为 public。 2. Access为public时,派生类称为公有派生;为private 时,称私有派生;为protected时,称保护派生
公有派生 例1:公有派生 执行后输出: 1101 y2云 1 y=2 3 Sum=15 y=2z3 2021/224
2021/2/24 7 公有派生 例1:公有派生。 1101 执行后输出: x=1 y=2 z=3 x=1 y=2 z=3 Sum=15 y=2 z=3
注:1当一个类从一个基类公有派生时,基类中 的公有成员在类外可以通过派生类的对象名与成 员名一起来直接使用它。 2基类中的保护成员只能在派生类的成员函 数中直接使用,而在派生类之外不能直接使用。 3派生类中定义的成员函数不能直接使用基 类中的私有成员。 2021/224 8
2021/2/24 8 注:1.当一个类从一个基类公有派生时,基类中 的公有成员在类外可以通过派生类的对象名与成 员名一起来直接使用它。 2.基类中的保护成员只能在派生类的成员函 数中直接使用,而在派生类之外不能直接使用。 3.派生类中定义的成员函数不能直接使用基 类中的私有成员
私有派生 1私有派生类的基类中公有成员和保护成员均为私 有的,派生类中可直接使用。 2派生类外不可直接使用基类中的公有或私有成员 ,必须通过派生类中的公有成员函数间接地使用。 3基类中的私有成员只能通过基类的公有或保护成 员函数间接使用它们。 例2:私有派生。 102 般使用公有派生,私有派生 及保护派生使用较少。 2021/224 9
2021/2/24 9 私有派生 1.私有派生类的基类中公有成员和保护成员均为私 有的,派生类中可直接使用。 2.派生类外不可直接使用基类中的公有或私有成员 ,必须通过派生类中的公有成员函数间接地使用。 3.基类中的私有成员只能通过基类的公有或保护成 员函数间接使用它们。 例2:私有派生。 1102 一般使用公有派生,私有派生 及保护派生使用较少
派生类对基类成员的访问规则 访问有三种类型: 1.内部访问:由类自己的函数访问,如前例 类 vehicle中的函数 print void print oi cout <<"n weight: < weight << pds; cout < n top speed: < topspeed <<"mph cout<<" in price:s"≤≤ price;} 2.类的对象访问:由类创建的对象访问。 vehicle av(1500,060,300创建对象 av. print();∥调用基类函数 3外部访问:由友元、继承类函数等访问。 2021/2/24 10
2021/2/24 10 派生类对基类成员的访问规则 3. 外部访问:由友元、继承类函数等访问。 访问有三种类型: 1. 内部访问:由类自己的函数访问,如前例 类vehicle 中的函数 print void print( ) { cout << "\n weight:" << weight << "pds"; cout << "\n top speed:" << topspeed << "mph"; cout << "\n price: $ "<< price; } 2. 类的对象访问:由类创建的对象访问。 vehicle av(15000, 60, 300000); //创建对象 av.print( ); //调用基类函数