第9章 派生和继承.ppt
文本预览下载声明
第9章 继承和派生 本章提要: 继承的基本概念 在C++中定义继承关系 访问控制 虚基类 继承性是面向对象程序设计中最重要的机制,它是通过派生方式实现的。 派生是从现有的类建立新类。新类继承了现有类的属性与行为,然后再添加自身特有的属性和方法。 通过继承,程序员可以复用已经调试好的高质量的代码,从而提高软件质量,缩短开发周期。 9.1 派生类 基类:已存在的用来派生新类的类为基类,又称为父类或超类。 派生类:由已存在的类派生出的新类称为派生类,又称为子类。 基类和派生类是继承中的两个概念,被继承的类称为基类,继承的类称为派生类。 派生类的定义格式: ★ 单继承 class 派生类名: 继承方式 基类名 { private: 成员表1; //派生类增加或替代的私有成员 public: 成员表2; //派生类增加或替代的公有成员 protected: 成员表3; //派生类增加或替代的保护成员 }; ★ 多继承:多继承可以看作是单继承的扩展。所谓多重继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。 class 派生类名:继承方式1 基类名1,继承方式2 基类名2, … { 派生类新定义成员; }; 9.2 继承方式 亦称为访问控制,是对基类成员进一步的限制。 派生时的继承方式将产生两种影响: 一、影响从基类继承的成员在派生类中如何被访问; 二、派生类又派生出新的类时,基类成员能否在派生类的派生类中被继承。 ★ 公有继承 public继承后的成员访问属性: 基类的public成员与protected成员继承后仍为public成员与protected成员,属性不变。 基类的private成员,继承后只能使用从基类继承的成员函数访问,不能在派生类新增的成员函数中直接访问。 public继承对继续派生的影响:基类的public成员与protected成员在派生类中仍为public或protected成员,可以继续派生。 例题:liti7-1.cpp ; liti11_1.cpp #include iostream.h #include iomanip.h class A { int a; public: void seta(int k){a=k;} int geta(){return a;} }; private继承后的成员访问属性 基类的public成员与protected成员继承后成为派生类的private成员,可以使用派生类的成员函数直接访问。 基类的private成员,继承后只能使用从基类继承的成员函数访问,不能在派生类新增的成员函数中直接访问。 从基类继承的成员函数将成为派生类的私有成员,不能通过派生类的对象引用,只能在派生类的新增成员函数中引用。 ★ 保护继承 比较公有继承与私有继承: 在影响继续派生方面:公有继承产生的派生类可以继续派生,可将基类的成员向后续的派生类传递。私有继承的派生类将阻断基类成员的向后传递,不能继续派生。 在数据安全方面:公有继承后,可以直接使用派生类对象引用基类成员。这样,当以公有继承方式连续派生时,不利于数据安全。私有继承后,在派生类中只能通过新增成员函数引用基类的成员函数,保证了数据使用的封装性与隐藏性。 为了能在派生过程中既能保证派生类可以继续派生,又能使对基类成员的引用受到一定限制。C++提供了成员的保护属性与继承的保护方式。 从访问权限看,protected成员与private成员相同,只能在类的成员函数中引用,而不能通过类对象引用。因此,保证了数据的封装与隐藏。 (1) 公有继承: 派生时用public作继承方式。 基类的公有(public)成员被继承为公有的。 基类的私有(private)成员在派生类中不可见。 基类的保护(protected)成员被继承为保护的。 (2) 私有继承: 派生时用private作继承方式。 基类的公有段(public)成员被继承为私有的。 基类的私有段(private)成员在派生类中不可见。 基类的保护段(protected)成员被继承为私有的。 (3) 保护继承: 派生时用protected作继承方式。 基类的公有段(public)成员被继承为保护的。 基类的私有段(private)成员在派生类中不可见。 基类的保护段(protected)成员被继承为保护的。 9.3 派生类的构造函数和析构
显示全部