1、继承结构:
基类(超类),派生类(子类)。派生类总是依附于基类,派生类对象中总是含有基类对象,即含有基类的数据成员。或者说,基类对象是派生类对象的组成部分。
2、访问父类成员
捆绑子类对象可以访问父类成员函数和自身成员函数;捆绑基类对象只能访问基类成员函数,不能访问子类成员函数。
类内访问控制。
继承分为公有继承,保护继承和私有继承。但一般来说以公有居多,此处不做详细讨论。
3、派生类的构造
默认构造。
如果派生类无默认构造函数,派生类的父类的构造函数必须有默认参数,否则会导致编译通不过,如课后习题第一题的错误
同时也可以再派生类的构造函数中规定调用基类构造函数形式。如:
4、继承方式分为三种。此处略去不谈。
5、继承与组合
类内含有对象成员的情形成为组合。继承和组合都重用了类设计。
5.1 性质差异
对于组合,成员对象的数据隐私是不能被直接访问的,必须通过成员对象的操作区间接访问。也就是累对象与成员对象之间是彼此独立的。
5.2 对象分析
对于继承,由于派生类与基类的性质的一致性,所以可以从基类的访问控制中获得对基类对象的数据成员直接访问的便利。
如,圆Circle类,包含中心点(Point类)位置和半径。但是Point类与Circle类之间谈不上继承的关系,因此此处使用组合更多的体现了精巧性。
二者最大的区别在于在组合中如果想调用对象的成员,必须而且只能调用公有的成员,对于私有的成员不可以访问,除非使用成员函数进行访问。但组合给人以清晰明了的感觉。圆不是从点继承来的,圆是由一个点和一个半径组成的,因此更多的时候,我们愿意从组合的角度来看待这个问题。
采用组合还是继承,应首先从两个类对象的性质来区分。性质相同的话,则一个类拥有另外一个类的大部分操作,此时选择继承会好一些,如果不同且四号纯粹的包含关系,那么组合就体现其优越性了。
6、多继承概念
多继承结构
7、虚拟继承
在虚拟继承下,main函数中的setWeight函数调用便不再模糊,得到了沙发床真正的多继承关系。
但最好是避免多继承的使用,因为现代程序已越来越淡化这方面的应用。
课后作业总结:
第3题:
同样,此题有另外一种方法。
第4题
同样也有另外一种方法
这种方法是第3题中的第二种方法的对象,即使用一天一天的加或者减,给出其中某一天的星期,根据日期的关系推导出最后的星期几。