类的复用
上一节了解了public继承是is-a关系;C++ PRIMER第十四章重用讲解包含has-a的两种用法:1.组件包含 2.私有继承包含
大多数人会倾向于使用包含,一方面方便理解,另一方面多重继承容易引起问题;私有继承主要区别在于私有成员变成了继承而来的无名成员,调用成员时依赖this的类型转换。
多重继承
MI会带来许多新问题:1.两个基类的同名方法; 2.多个相关基类继承同一个类的多个实例问题;为此大家对MI有喜忧参半不同的态度。
祖先相同时,要用虚基类解决 class Singer:virtual public Worker,虚拟继承。禁止正常的信息再中间类自动传递。
MI中间隐含较多问题,尽量减少使用,要么就不用。
类模板
模板主要作用是提供参数化类型,将类型关键名作为参数传递给模板类或函数,从而实现最大程度代码复用。
模板类型使用指针时,代码实现上也得调整,所以一般减少依赖指针模板使用,尽量时bool,char,int,double,string,及一般对象等。
为容器类提供可重用代码是引入模板的主要动机。非类型参数可以是int,枚举,引用或指针,因此double m 不合法,但double *m是合法的。
模板多功能性,可用于基类,组件类以及其他模板的类型参数。
1 | template <class T> |
模板参数类似函数参数,带有隐式显式转换及参数匹配规则。
友元类
两个类关系既不是is-a也不是has-a,但存在控制的关系如电视和遥控。则可以定义遥控为电视的友元类,能够合理范围内修改电视的私有和保护的部分。相当于友元类需要直到朋友类的数据细节乃至实现细节。