类模板

来源:互联网 发布:淘宝电脑可靠么 编辑:程序博客网 时间:2024/04/27 21:37

模板是C++支持参数化的工具。
使用类模板使用户可以为类声明一种模式,使得类中的某些数据成员,某些成员函数的参数、返回值能取

任意类型。

1、类模板的声明形式
=====================
template <模板参数表>
类声明
=====================

注意:模板类的成员函数必须是函数模板
模板参数表包含下列内容:
a.   class 标识符    //接受任意类型参数
b.   类型说明符 标识符 //接受常量参数

 

2、使用一个模板类来建立对象
=====================
模板<模板参数表> 对象名1,...,对象名n;
=====================


3、成员函数的的声明
=====================
template <模板参数表>
返回值类型 类名<标识符1,...,标识符n>::函数成员名(参数表)
{
 函数体
}
=====================
其中“标识符”是指模板参数表中的标识符

 

#include <iostream.h>
#include <stdlib.h>

struct Student
{
 int id;
 float gpa;
};

template <class T> //类模板,实现对任意数据类型进行存取
class Store
{
private:
 T item;
 int haveValue;
public:
 Store(void);  //默认形式(无型参)的构造函数

 T GetElem(void);//提取数据函数,返回值和型参都是任意类型数据;
 void PutElem(T x);
};

//以下实现各成员函数
//注意:类模板成员函数,若在类外实现,则必须是模板函数

//默认形式的构造函数的实现,无返回值。
template <class T>
Store<T>::Store(void):haveValue(0)  
{}

//提取数据函数的实现
//在类外定义必须由作用域运算符"::"来通知编译系统该函数所属的类
//且必须指明类的函数模板,下文中“template <class T> T Store<T>”
//template <class T>是模板定义的类型,T是成员函数GetElem(void)的返回值
//类Store<T>所指明的参数类型名称T必须是在类模板中定义的
template <class T>
T Store<T>::GetElem(void)
{
 if(haveValue==0)
 {
  cout<<"No item present!"<<endl;
  exit(1);
 }
 return item;
}

//存入数据函数实现
template <class T>
void Store<T>::PutElem(T x)
{
 haveValue++;
 item=x;
}

void main(void)
{
 Student g={1000,23};

 Store<int>S1,S2;
 Store<Student>S3;
 Store<double>D;

 S1.PutElem(3);
 S2.PutElem(-7);
 cout<<S1.GetElem()<<" "<<S2.GetElem()<<endl;

 S3.PutElem(g);
 cout<<"The student ID is "<<S3.GetElem().id<<endl;

 cout<<"Retrieving object D  "<<endl;
 cout<<D.GetElem()<<endl;

}


 

原创粉丝点击