您的位置:首页 > 编程语言 > C语言/C++

【C++】类模板基础概念以及用法

2016-06-17 17:36 441 查看

一、为什么要引进类模板

减少代码重用。

这个概念在C++里有很多

二、类模板与模板类

(1)类模板的含义

类模板的意思是,按不同的方式重复使用相同的代码。

一个类模板(也称为类属类或类生成类)允许用户定义为类定义的一种模式,是的类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型

包括系统预定义的和用户自定义的

(2)类模板和类模板的概念

类模板:是一个类型参数化的样板,是一组类模板的集合

模板类:是某个类模板的一个实例

(3)类模板的定义格式

template <模板参数表> //------>模板参数表的形式 class(标识符)

class (类名)

{

(类型说明)

};

//类体实现

(4)模板类的使用格式

<类模板名> <对象名>

三、类模板的一个实例

说明:

下面这个代码实现的是有界的数组

利用类模板可以定义不同类型的数组(如int 、double)

代码块:

#include<iostream>
using namespace std;
//这是一个类模板,用于描述一个有界的数组
template <class AType>//尖括号里是模板参数表
class array//定义一个array类
{
public:
array(int size);//构造函数
~array()//析构函数
{
delete [] a;//释放
}
AType & operator[](int i);//运算符
private:
int length;//私有成员  长度
AType *a;//私有成员  自定义类型的一个  指针a
} ;
template <class AType>
array<AType>::array(int size)//size为数组的大小
{
register int i;
length = size;
a = new AType[size];
if(!a)
{
cout<<"动态空间申请失败!"<<endl;
exit(1);
}
for( i = 0;i<size ;i++)
{
a[i] = 0;
}
}
template <class AType>
AType & array<AType>::operator[](int i)
{
if(i<0 || i>length-1)//若输入 0 或者大于长度 ,那么越界
{
cout<<"\n这个数 "<<i<<" 越界了,退出程序!\n";
exit(2);
}
return a[i];
}
/***********上面可以封装到一个头文件里,以后都可以用了*******/
int main()
{
array<int> a1(10);//定义模板类整型对象a1 ,括号里为数组大小
array<double> a2(5);//定义模板类双精度型对象a2
int i = 0;
cout<<"整形数组  :";
for(int i(0); i<10; i++)//int i(0)是int类里面的构造函数,意思和 i = 0相同
{
a1[i] = i+1;//对数组元素进行赋值
}
for( i = 0; i<10 ; i++)
{
cout<<a1[i]<<"  ";//打印a1数组
}
cout<<endl;
cout<<"双精度数组:";
cout.precision(4);//输出小数点后3位,第4位四舍五入。
for( i = 0; i<5; i++)
{
a2[i] = (double)(i+1)*3.14;//打印
}
for( i = 0; i<5 ; i++)
{
cout<<a2[i]<<"  ";
}
cout<<endl;
a1[20] = 15;//这里判断 a1[20]越界了,然后调用 AType & array<AType>::operator[](int i),退出程序
a2[20] = 25.5;//这条语句并没有执行
return 0;
}

运行结果:



四、小结

类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: