面向对象程序设计有4个主要特点:抽象、封装、继承和多态性。
继承性是面向对象程序设计最重要的特征,可以说,如果没有掌握继承性,就等于没有掌握类和对象的精华,就是没有掌握面向对象程序设计的真谛。
类之间的关系
has-A,uses-A 和 is-A三种关系。
has-A:包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。
uses-A :一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。
is-A: 机制称为“继承”。关系具有传递性,不具有对称性。
继承相关概念
继承:是类之间定义的一种重要关系。
一个B类继承A类,或称从类A派生类B,类A称为基类或者父类,类B称为派生类或者子类。
派生类的定义
类继承关系的语法形式:
1 | class 派生类名:基类名 |
基类名表构成
访问控制 基类名1,访问控制 基类名2,……访问控制 基类名n
访问控制表示派生类对基类的继承方式使用关键字:
public:公有继承
private:私有继承
protected:保护继承
派生类的访问控制
说明:
子类拥有父类的所有成员变量和成员函数
子类可以拥有父类没有的方法和属性
子类就是一种特殊的父类
子类对象可以当作父类对象使用
派生类继承了基类的全部成员变量和成员方法(除了构造和析构之外的成员方法),但是这些成员的访问属性,在派生过程中是可以调整的。
C++中的继承方式会影响子类的对外访问属性
public继承:父类成员在子类中保持原有访问级别
private继承:父类成员在子类中变为private成员
protected继承:父类中public成员会变成protected
父类中protected成员仍然为protected
父类中private成员仍然为private
private成员在子类中依然存在,但是却无法访问到。不论种方式继承基类,派生类都不能直接使用基类的私有成员。
C++中的继承方式会影响子类的对外访问属性
public继承:父类成员在子类中保持原有访问级别
private继承:父类成员在子类中变为private成员
protected继承:父类中public成员会变成protected
父类中protected成员仍然为protected
父类中private成员仍然为private
private成员在子类中依然存在,但是却无法访问到。不论种方式继承基类,派生类都不能直接使用基类的私有成员 。
“三看”原则
C++中的继承方式(public、private、protected)会影响子类的对外访问属性
判断某一句话,能否被访问
1)看调用语句,这句话写在子类的内部、外部
2)看子类如何从父类继承(public、private、protected)
3)看父类中的访问级别(public、private、protected)
派生类类成员访问级别设置的原则
思考:如何恰当的使用public,protected和private为成员声明访问级别?
1、需要被外界访问的成员直接设置为public
2、只能在当前类中访问的成员设置为private
3、只能在当前类和子类中访问的成员设置为protected,protected成员的访问权限介于public和private之间。
练习
1 |
|