收藏 分销(赏)

实验八、函数模板与类模板的应用.doc

上传人:仙人****88 文档编号:11990112 上传时间:2025-08-26 格式:DOC 页数:9 大小:248KB 下载积分:10 金币
下载 相关 举报
实验八、函数模板与类模板的应用.doc_第1页
第1页 / 共9页
实验八、函数模板与类模板的应用.doc_第2页
第2页 / 共9页


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

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服