C++模板

类模板声明的语法形式是;

template<模板参数>
class 类名
{
     类成员声明
}

如果需要在类模板意外定义其成员函数,则要采用以下的形式:

template<模板参数>
类型名 类名<模板参数标示符列表>::函数名(参数表)

一个类模板声明自身并不是一个类,他声明了类的一个家族。只有当其他代码引用时,模板才根据引用的需要生成具体的类。

使用一个类模板建立对象时,应按如下形式声明:

模板名<模板参数表>对象名1,对象名2,...,对象名n;

实例介绍:

#include<iostream>
#include<cstdlib>
using namespace std;

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

template<class T>//类模板实现对任意数据类型的存取
class Store{
private:
	T item;//item用于存放放任意数据类型的数据
	bool haveValue;//haveValue用于标记item是否已被存入内容
public:
	Store();//默认形式无参的构造函数
	T &getElem();//提取数据函数
	void putElem(const T &x);//存入数据函数

};
//以下实现个成员函数
template<class T>//默认构造偶函数实现
Store<T>::Store():haveValue(false){}

template<class T>//提取数据函数的实现
T &Store<T>::getElem(){
	if(!haveValue){				//如果试图提取未初始化的函数,则终止程序
		cout<<"No item present"<<endl;
		exit(1);				///使程序完全退出,返回到操作系统
		//参数可用来表示程序终止的原因,可以被操作系统接受
	}
	return item;

}

template <class T>
void Store<T>::putElem(const T &x){
	haveValue=true;//将havevalue的值置为true,表示item中已存入数值
	item=x;//将x值存入item
}


int main(){
	Store<int>s1,s2;//定义两个Store<int>类对象,其中数据成员item为int类型
	s1.putElem(3);//向s1中存入数据,即初始化
	s2.putElem(-7);//向s2中存入数据,
	 cout<<s1.getElem()<<""<<s2.getElem()<<endl;
	 //输出s1,s2的数据成员
	 Student g={1000,23};
		 //定义Student类型结构体变量的同事付初值
	 Store<Student>s3;
	 //定义 Store<student>类对象s3,其中数据成员item为Student类型
	 s3.putElem(g);//向s3中存入数据
	 cout<<"The student id is"<<s3.getElem().id<<endl;
	 //输出对象s3的数据成员
	 Store<double>d;//定义 Store<double>类对象d,其中数据成员item为double类型
	 cout<<"Rretrieving object d ……"<<endl;
	 cout<<d.getElem()<<endl;
	 //输出对象d的数据成员
	 //由于d未经初始化,在执行函数d.getElem()过程中导致程序终止
	 return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值