学生姓名: 学 号: 专业班级:
实验类型:■ 验证 □ 综合 □ 设计 □ 创新 实验日期: 实验成绩:
一、实验项目名称
函数模板与类模板的应用
二、实验目的
1、掌握模板的概念与应用
2、掌握函数模板的定义和使用方法
3、掌握多个模板参数的类模板的定义和使用方法
4、掌握泛型程序设计的基本方法
三、实验任务
利用VC++6.0编写程序,然后编译、运行,并查看结果是否正确。
题目1、3、4(p211)
四、主要仪器设备及耗材
软件:visual c++
五、实验步骤
1、阅读实验指导中实验 8的相关内容,了解实验目的和实验要求。
2、根据实验指导把每个要解决的问题罗列出来。
3、根据要求分别编写代码,上机实验,查错,并将结果截图。
六、实验数据及处理结果
题目一:
(1)代码:
#include #include template T Max(T value[], int size) { T max = value[0]; T temp; for (int i = 0;i < size;i++) if (value[i] > max) { temp = max; max = value[i]; value[i] = temp; } return max; } const int N=5; #include"exp8_1.h" int main() { int i,arr[N]; double dou[N]; cout<<"输入"< cout<<"最大值为"< cout<<"最大值为"< } (2)结果: 题目二: (1)代码: #include template class Test { public: Test(T1 x,T2 y,T3 z) { data1=x; data2=y; data3=z; } void Display(); private: T1 data1; T2 data2; T3 data3; }; template void Test { cout< #include"exp8_2.h" int main() { Test obj1.Display(); Test obj2.Display(); Test obj3.Display(); return 0; } (2)结果: 题目三: (1)代码: #include using namespace std; template class Complex { public: Complex(T1 r,T2 i); void Print(); Complex operator + (const Complex &a); Complex operator - (const Complex &a); private: T1 real; T2 imag; }; //构造函数 template Complex { real=r; imag=i; } //打印函数 template void Complex { cout< { if(imag > 0) cout<<"+"; cout< cout< //以成员函数形式重载运算符+ template Complex { real+=a.real; imag+=a.imag; return *this; } //以成员函数形式重载运算符- template Complex { real-=a.real; imag-=a.imag; return *this; } #include"exp8_3.h" int main() { Complex A1.Print(); Complex A2.Print(); Complex A3.Print(); Complex A1=A4+A5; cout<<"(4+4i)-(5+5i)="; A1.Print(); Complex A2=A7-A6; cout<<"(7.7+7.7i)-(6.6+6.6i)="; A2.Print(); return 0; } (2)结果: 题目四: (1)代码: #include #include #include #include using namespace std; int main() { ostream_iterator //用输出迭代子output来输出,其中第二参数" "表示用空格分隔各个整数。 int ia[18]={47,29,5,37,13,23,11,61,7,31,41,2,59,19,17,53,43,3}; vector //定义向量vec,用数组ia中前9个元素来初始化vec vector if(vec.empty()) cout<<"vector空"< cout<<"vector不空,"<<"vector中的元素:"< //将容器中不重复的元素输出 cout< cout<<"当前分配元素空间数量:"< vec.reserve(12); //完成向量vec中元素逆序排列 cout<<"当前为vector保留的最小分配元素空间数量:"< //删除向量中的元素 cout<<"当前分配元素空间数量:"< //重新分配10个元素空间 cout<<"当前重新分配元素空间数量为10,实际分配元素空间数量:"< //用ia中的第10~18个元素给vec赋值 cout<<"vector存放序列容许最大长度:"< //输出vec中的元素 cout< //用ia中全部元素来给vec赋值 cout<<"vector中的元素:"< //输出vec中的元素 cout< //降序排列 cout<<"vector中的元素:"< cout< cout< cout<<"最后1个元素:"< cout<<"第8个元素:"< //输出vec2中的元素 cout< //交换两个向量中的元素 cout<<"交换后vector2中的元素:"< cout< } (2)结果: 七、思考讨论题或体会或对改进实验的建议 初步了解了泛型程序设计的基本方法,基本掌握了函数模板、模板参数的类模板的定义和使用。 八、参考资料 [1]朱立华等 面向对象程序设计及C++(第2版),人民邮电出版社 2012.2 [2]朱立华等 面向对象程序设计及C++实验指导(第2版),人民邮电出版社 2012.2 [3]苏小红等C语言程序设计,高等教育出版社 2011年8月 [4]苏小红等 C语言程序设计学习指导,高等教育出版社 2011年8月下载本文