现在的位置: 首页 > 综合 > 正文

C++学习笔记_9:类模板

2012年06月12日 ⁄ 综合 ⁄ 共 1445字 ⁄ 字号 评论关闭
//template  <模板参数表> 
//类声明
//定义一个类模板与定义函数模板的格式类似,必须以关键字template开始,后面是尖括号括 起来的模板参数,然后是类名,格式如下 
//    template<class Type>
//    class 类名 { 
//    	//...
//    };
//其中template是一 个声明模板的关键字,它表示声明一个模板. class 表示后边的 type 是类模板参数 
//在类定义中,欲采用通用数据类型的数据成员、成员函数的参数或返回值,前面需加上Type

//在类定义体外定义成员函数时,若此成员函数中有模板参数存在,则需要在函数体外进行模板声明,并且在函数名前的类名后缀上"<Type>"
//例如,成员函数在类定义体外定义为:
//  template<class T>
//T complex<T>:: realcomplex()    
//{return real;}

//类模板不代表一个具体的、实际的类,而代表着一类类。实际上,类模板的使用就是将类模板实例化成一个具体的类,它的格式为:
//类名<实际的类型>对象名;
//例如,使用上面的类模板,创建两个模板参数为double型的对象,语句如下:
//complex<double> s1,s2;
//创建两个模板参数为int型的对象:
//complex<int> s1,s2;

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

// 结构体Student
struct Student
{
    int     id;  	//学号
    float   gpa;    //平均分
};  

//类模板:实现对任意类型数据进行存取
template <class T>  
class Store
{   
	private:
        T item;         	//用于存放任意类型的数据
        int haveValue;  	//用于标记item是否已被存入内容
    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>::GetElem(void)    
{   						//如果试图提取未初始化的数据,则终止程序
    if (haveValue == 0)
    {  cout << "No item present!" << endl;
        exit(1);
    }
    return item;    		//返回item中存放的数据 
}

template <class T>     		//存入数据函数的实现 
void Store<T>::PutElem(T x)
{   
	haveValue++;      		//将haveValue 置为 TRUE,表示item中已存入数值
    item = x;         		//将x值存入item
}
int 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  " ;
	cout << D.GetElem() << endl;  //输出对象D的数据成员
	
	return 0;
}

抱歉!评论已关闭.