6-2 类模板Store的定义与使用 (10 分)
struct Student { // 结构体Student int id; //学号 float gpa; //平均分 };
//定义类模板及函数,函数在类体外定义 template class Store //类模板:实现对任意类型数据进行存取
int main() {
try {
Store s1, s2; //定义两个Store类对象,其中数据成员item为int类型
s1.putElem(3); //向对象S1中存入数据(初始化对象S1)
s2.putElem(-7); //向对象S2中存入数据(初始化对象S2)
cout << s1.getElem() << " " << s2.getElem() << endl; //输出对象S1和S2的数据成员
Student g = { 1000, 23 }; //定义Student类型结构体变量的同时赋以初值
Store s3; //定义Store类对象s3,其中数据成员item为Student类型
s3.putElem(g); //向对象D中存入数据(初始化对象D)
cout << "The student id is " << s3.getElem().id << endl; //输出对象s3的数据成员
Store d; //定义Store类对象s4,其中数据成员item为double类型
cout << "Retrieving object d... ";
cout << d.getElem() << endl; //输出对象D的数据成员
//由于d未经初始化,在执行函数D.getElement()过程中导致程序终止
}
catch (...)
{
cout << "get item error!";
}
return 0;
}
3 -7
The student id is 1000
Retrieving object d... No item present!
get item error!
template
class Store
{
public:
Store(T i):item(i){}
Store(){}
virtual ~Store(){}
void putElem(T i){
item = i;
hasvalue++;
}
T getElem(){
if(hasvalue ==1){
return item;
}else{
cout << "No item present!" << endl;
throw 100;
}
}
private:
T item;
int hasvalue = 0;
};