4.类的继承
一.类与类之间的关系
1.类与类之间可能存在共性。
2.类与类之间必定会有差异。
3.为了节约开发时间和代码量,我们在设计类时可以把类的共享对象抽出来形成一个基础类(基类)
4.使用基类+差异 = 派生类
二.继承的语法
1.在设计一个类时如果已有的类中有它需要的成员,它可以从已有的类中继承哪些成员,被继承的类叫父类或基类,继承类叫作派生类或子类。
1 class 类名 : 继承方式 基类1,继承方式 基类2,... 2 { 3 4 } 5
2.子类会完全继承父类中的所有成员(包括能访问和不能访问的)
3.在设计类时如何形成继承关系
类的设计:
a.根据问题找对象。
b.把对象中我们需要的属性和行为抽象出来
c.把抽象出来的结构封装到一个class中形成一个类
d.使用抽象出来的类进行实例化
e.对象调用成员函数解决问题
继承就是在对对象抽象的结果进行归纳总结,找出它们的共性形成基类,再把基类+差异派生出子类。
4.继承的优点:代码复用
子类在继承父类后可以节约大量的代码, 节省开发时间,缩短开发周期
5.继承的缺点:
a.继承会提高类与类之间的耦合度
b.会降低代码的安全性和可维护性
三.使用继承要注意的问题
1.继承虽然可以获取父类中的所有成员,但是子类中可以屏蔽父类中的同名成员(即使是变量和函数同名也会同名)
2.父子类间不可以形成重载,只有在同一作用域下的同名函数不同参数,const属性的同名函数才能形成重载
3.父类中的成员在子类中的访问属性
父类中的public和protected在子类中可以访问
父类中的private在子类中不可以访问
4.继承的方式
不同的继承方式会影响子类中的父类的成员,在类外的访问方式
public 不变
protected 公有变保护,其他不变
private 全部变成私有
四.虚函数
1.子类中会隐藏父类中的同名函数,这种关系叫隐藏(但是这个时候假如你用一个父类的指针指向这个子类,那么调用父类和子类中的同名函数时候,会调用父类的)。
2.在同一作用域下的同名函数,这种关系叫做重载。
3.如果父类中的同名函数添加了virtual关键字,这种函数就叫做虚函数,子类会覆盖父类中同名的函数
4.虚函数是实现多态的基础。
五.继承的构造,析构,拷贝
1.在继承时,先调用父类的构造函数,在调用子类的构造函数
2.在继承中,先调用子类的析构,在调用父类的析构
3.拷贝构造也是先父类的拷贝构造在子类的拷贝构造
4.在C++中,可以有多个父类,在构造时,会按基础表的顺序调用父类的构造函数。
5.在析构时,子类会先调用自己的析构函数,然后再按照基础表的逆序来调用析构函数。
可以将每一个类的构造析构比喻为一对括号