类模板1——基本概念

来源:互联网 发布:在淘宝上开网店程序 编辑:程序博客网 时间:2024/05/01 16:37

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型,所以在结果中可以清楚地看到区别,这样体现了类模板的优势,只有定义一种类型的模板,就可以实现不同对象的定义。

0 0
原创粉丝点击