【C++】数组类的定义(类模板)

一、为什么要引进类模板

减少代码重用。

这个概念在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;
}

运行结果:

四、小结

类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。

 

--------->类模板的简单实用方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值