- 论坛徽章:
- 0
|
本帖最后由 qingshanxiaozi 于 2011-03-17 09:13 编辑
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) {}
问题是这里的“:haveValue(0)”是什么意思?不是说在类的模板外定义类的成员函数的形式是:
类型名 类名<模板参数表>::函数名(参数表)
那么“: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>: utElem(T x)
{ haveValue++; // 将haveValue 置为 TRUE,表示item中已存入数值
item = x; // 将x值存入item
}
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 " ;
cout << D.GetElem() << endl; //输出对象D的数据成员
// 由于D未经初始化,在执行函数D.GetElement()时出错
} |
|