实验八、函数模板与类模板的应用 下载本文

南昌大学实验报告

学生姓名: 学 号: 专业班级: 实验类型:■ 验证 □ 综合 □ 设计 □ 创新 实验日期: 实验成绩:

一、实验项目名称

函数模板与类模板的应用 二、实验目的

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\int main() { int i,arr[N]; double dou[N]; cout<<\输入\个整数\ for (i=0;i>arr[i]; cout<<\最大值为\ cout<<\输入\个双精度型数据\ for (i=0;i>dou[i]; cout<<\最大值为\ return 0; }

(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::Display() { cout<

}

#include\int main() { Test obj1(1,2,3.3); obj1.Display(); Test obj2('A',1.1,2.2); obj2.Display(); Test obj3(\分\ 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::Complex(T1 r,T2 i) { real=r; imag=i; }

//打印函数

template void Complex::Print() { cout< 0) cout<<\ cout<

//以成员函数形式重载运算符+ template

Complex Complex::operator + (const Complex &a) { real+=a.real; imag+=a.imag; return *this; }

//以成员函数形式重载运算符- template

Complex Complex::operator - (const Complex &a) { real-=a.real; imag-=a.imag; return *this; }

#include\

int main() { Complex A1(1,2); A1.Print(); Complex A2(1.1,2.2); A2.Print(); Complex A3(1,2.2); A3.Print(); Complex A4(4,4),A5(5,5); A1=A4+A5; cout<<\ A1.Print(); Complex A6(6.6,6.6),A7(7.7,7.7); A2=A7-A6; cout<<\ A2.Print(); return 0; }

(2)结果:

题目四: (1)代码:

#include

#include #include #include using namespace std; int main() { ostream_iteratoroutput(cout,\ //用输出迭代子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,ia+9); //定义向量vec,用数组ia中前9个元素来初始化vec vector vec2(18);//声明有18个元素的vector向量vec2 if(vec.empty()) cout<<\空\ else{ cout<<\不空,\中的元素:\ unique_copy(vec.begin(),vec.end(),output); //将容器中不重复的元素输出 cout<

cout<

sort(vec.begin(),vec.end(),greater()); //降序排列

cout<<\中的元素:\

unique_copy(vec.begin(),vec.end(),output); cout<

cout<<\用逆向迭代子输出vector中的元素:%unique_copy(vec.rbegin(),vec.rend(),output);

cout<

cout<<\最后1个元素:\ //输出最后1个元素

cout<<\第8个元素:\ cout<<\原vector2中的元素:\

unique_copy(vec2.begin(),vec2.end(),output); //输出vec2中的元素 cout<

vec2.swap(vec); //交换两个向量中的元素

cout<<\交换后vector2中的元素:\ unique_copy(vec2.begin(),vec2.end(),output); cout<

}

(2)结果:

七、思考讨论题或体会或对改进实验的建议

初步了解了泛型程序设计的基本方法,基本掌握了函数模板、模板参数

的类模板的定义和使用。 八、参考资料

[1] 朱立华等 面向对象程序设计及C++(第2版),人民邮电出版社 2012.2 [2] 朱立华等 面向对象程序设计及C++实验指导(第2版),人民邮电出版社

2012.2

[3] 苏小红等C语言程序设计,高等教育出版社 2011年8月

[4] 苏小红等 C语言程序设计学习指导,高等教育出版社 2011年8月