类继承(class inheritance)
它能够从已有的类派生出新的类,而派生类继承了原有类(基类)的特征,包括方法。
从一个类派生出来另一个类时,原始类称为基类,继承类称为派生类。
派生类特征:
1、派生类对象存储了基类的数据成员(派生类继承了基类的实现)。
2、派生类对象可以使用基类的方法(派生类继承了基类的接口)。
派生类与基类之间有一些特殊关系。其中之一是派生类对象可以使用基类的方法,条件是方法不是私有的。另外还有两个重要的关系:
基类指针可以在不进行显式类型转换的情况下指向派生类对象;不过,基类指针或引用只能用于调用于调用基类方法。
继承——is-a关系:
因为派生类可以添加特性,所以,将这种关系称为 is-a-kind-of(是一种)关系可能更准确,但是通常使用术语is-a。
多态公有继承有两种重要的机制:
1、在派生类中重新定义基类的方法。
2、使用虚方法。
静态联编和动态联编:
将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编(binding)。在联编过程中进行联编被称为静态联编(static binding)。编译器必须生成能够在程序运行时选择正确的虚方法的代码,这被称为动态联编(dynamic binding)。
protected
对于外部世界来说,保护成员的行为与私有成员相似:但对于派生类来说,保护成员的行为与公有成员相似。
valarray类
这类的方法:
1、operator【】:让你能够访问数组中的元素。
2、size:返回数组中包含的元素数。
3、sum:返回所有元素的总和。
4、max:返回最大的元素。
5、min:返回最小的元素。
私有继承:
C++还有另一种实现has-a关系的途径——私有继承
模板:
模板常被用作容器类,这是因为类型参数的概念非常适合于将相同的存储方案用于不同的类型。一种方法是在类中使用动态数组和构造函数参数来提供元素数目。另一种方法是使用模板参数来提供常规数组的大小。
模板的具体化:类模板与函数模板很相似,因为可以有隐式实例化、显式实例化和显式具体化,它们统称为具体化(specialization)。