类模板1——基本概念

1、概念:类模板是一个参数化类型,也就是使用一个或者多个参数创建一系列类的方式。在C++标准库中,有一种叫做容器类,这种类可以用来管理某种特定类型的元素。这样的  一个容器是通过模板来实现的,不需要确定容器中元素的具体类型,这样定义的类型更加便于管理。


2、类模板的定义:

template<模板参数列表> class <类名>

{

//类模板的实现

};


类模板与普通类最大的区别就在于参数模板,一般的类的参数类型都固定了,而类模板的参数可以在实例化的时候确定。参数列表包含两种类型的参数:类型参数和非类型参数,类型参数就是用typename或者class来修饰的不确定类型;而非类型参数是指某种具体的参数,如int类型变量a,char类型变量b。

eg:template<typename T,int  a>

class Student

{

//类体;

};

上述例子定义了一个Student的类模板,该模板的参数有类型参数T和非类型参数int  a。


3、实例:定义简单的Student的类模板,并用该模板实例化产生一些类。

/***********************************************************
时间:2016年10月8日10:11:18
功能:定义一个学生类,并定义函数模板,求两门课的平均分
************************************************************/
#include <iostream>
using namespace std;

//定义模板类
template <typename T3,typename T1,typename T2>
class Student
{
public:
	
	Student(char *pn);  //构造函数
	T3 average(T1 c,T2 m);  //求两科的平均分
	void print()
	{
		cout<<"The student's name = "<<name<<endl;
	}
private:
	char name[10];
	T1 chinese;   //定义两门课的成绩
	T2 math;  
};

template <typename T3,typename T1,typename T2>  //构造函数实现
Student<T3,T1,T2>::Student(char *pn)
{
	strcpy(name,pn);
}

template <typename T3,typename T1,typename T2>  //求平均分函数的实现
T3 Student<T3,T1,T2>::average(T1 c,T2 m)
{
	chinese = c;
	math = m;
	return (math+chinese)*1.0/2;
}

void main()
{
	double mean;       //定义平均分
	Student<double,int,double> student1("king");    //定义对象并初始化
	Student<int,double,double> student2("juan");    //定义对象并初始化,注意初试话时类型参数定义的是不一样的
	student1.print();  //打印学生姓名
	mean = student1.average(84,86.5);
	cout<<"The mean of student1's two subject is: "<<mean<<endl;

	student2.print();  //打印学生姓名
	mean = student2.average(89.2,86.5);
	cout<<"The mean of student2's two subject is: "<<mean<<endl;
}
运行结果如下图所示:


从上图结果可以看出,定义了类模板,其中含有3个类型参数,这三个参数用于求取平均成绩的函数模板中。上图中定义的第一个对象成绩的返回值定义的为double型,而第二个对象成绩的返回值为int型,所以在结果中可以清楚地看到区别,这样体现了类模板的优势,只有定义一种类型的模板,就可以实现不同对象的定义。

发布了56 篇原创文章 · 获赞 50 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/jinpeng_cumt/article/details/52747937
今日推荐