根据上一篇博客中举的数组的例子,这篇博客就对其进行继承,再继承一个模板类出来。
下面程序中的searcharray模板就继承了之前的freearray模板类,然后在他的基础上实现对特定数组元素的查找操作:
//此模板继承自freearray
template
class searcharray:public freearray
{
public:
//构造函数
searcharray(int s):freearray(s){}
//拷贝构造函数
searcharray(const searcharray &);
//查找特定元素
int finditem(t);
};
template
searcharray::searcharray(const searcharray &obj)
{
for(int n=0;nsizearray();n )
this->operator[](n) = obj[n];
}
template
int searcharray::finditem(t item)
{
for(int n=0;n<=this->sizearray();n )
{
if(this->operator[](n) == item)
return n;
}
return -1;
}
主函数测试:
//模板类的继承测试
searcharray arrint(10);
int x;
for(x=0;x<10;x )
arrint[x] = x 3;
cout<<"the value of int array is:";
for(x=0;x<10;x )
cout<
运行结果:
注意,从模板类a中继承得到模板类b的时候,这两个模板的定义最好都放在同一个头文件下。
根据测试,我使用的codeblocks和gcc的编译器不支持让他们放在两个文件中。
总结:
- 一个类模板不仅可以从另一个类模板中导出,也可以从一个普通类导出,当然普通类也可以继承一个模板类;
- 也就是说,普通类和模板类可以构成四种继承关系。