1.包含:类里有这样的成员——本身是另一个类的对象
2.包含,私有,保护继承用于实现has-a关系
3.valarray类,模板类,用于声明数组
包含以下方法:operator[]() size() sum() max() min()
4.使用包含,类可以获得实现,不继承接口。不继承接口是has-a关系的组成部分
5.C++要求在构建对象的其他部分之前,先构建继承对象的所有成员对象
6.使用公用继承,基类的公有方法将成为派生类的公用方法
私有继承,积累的公有和保护方法会成为派生类的私有方法
7.使用私有继承,类将继承实现
8.包含将对象作为一个命名的成员对象添加到类中,私有继承将对象作为一个未被命名的继承对象添加到类中。称为子对象
9.使用公用继承,基类指针或引用可以指向子类
私有继承,基类指针或引用不可以指向子类(要显式类型转换)
10.通常使用包含而不用私有继承
好处是私有继承会产生很多问题,可以包含多个同类子对象(私有继承只有一个对象)
私有继承的好处是可以获取到基类的保护成员,这只能在继承关系才能得到
11.保护继承 使用protected
使用保护继承和私有继承的重要区别:
使用私有继承,第三代类将不能使用基类的公有接口,因为基类的公有方法在派生类中变成了私有方法
使用保护继承,基类的公有方法在第二代中变成受保护的,所以第三代可以使用
12.各种继承方式 P550
13.在子类中使用using声明使用基类的成员,不管基类的成员是公有还是私有,都可以在子类中使用
15.多重继承,主要两个问题:
从两个不同的基类继承同名方法;
从两个或更多相关基类哪里继承同一个类的多个实例
16.新技术——虚基类
从多个类(它们的基类相同)派生出的对象只继承一个基类对象
如:class Singer:virtual public Worker{。。。};
class Waiter:virtual public Worker{。。。};
然后class SingingWaiter : public Singer, public Waiter{。。。};
这样子,SingingWaiter对象将只包含Worker对象的一个副本。
从本质上来说,继承的Singer和Waiter对象共享一个Worker对象,而不是各自引入自己的Worker对象副本
17.多重继承下构造函数要新的写法
SingingWaiter(const Worker & wk,int p = 0,int v = Singer::other):Work(wk),Waiter(wk,p),Singer(wk,v){}
如果类有间接虚基类,则除非只需使用该虚基类的默认构造函数,否则必须显式地调用该虚基类的某个构造函数
18.多重继承MI一些探讨P566
19.定义类模板
类前添加template <class Type>
模板类的成员函数在类外实现也要添加template <class Type>
20.类模板必须显式提供所需的类型
21.如何处理指针栈P573
22.类模板可以使用非类型参数
如template <class T,int n>
23.模板的递归使用P579
24.使用多个类型参数 template<class T1,class T2>
25.默认类型模板参数 template<class T1,class T2 = int>
26.模板有隐式实例化,显式实例化,显式具体化,部门具体化P583
27.模板可以用作结构,类或模板类的成员P584
28.模板类和友元,分3类
非模板友元
约束模板友元
非约束模板友元P588
29.取模板别名字
typedef 方法和using 方法·
typedef std::array<double,12> arrd;
template <class T>using arrtype = atd::array<T,12>;
14.7这章内容很难,以后多关注