一、实验目的
通过使用模板来实现类属编程,以此来简化编程。 模板是 C++语言中相对较新的一个重要特性。模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了更大规模的软件开发。模板可以让程序对任何其它数据类型进行同样方式的处理。
C++程序由类和函数组成,模板也可以分为类模板(class template)和函数模板
(function template)。
函数模板的一般定义形式为:
Template <类型形式参数表> 返回类型 函数名(形式参数表)
{
//函数定义体
}
类模板的一般定义形式是:
Template <类型形式参数表>class 类名
{
//类声明体
};
类中成员函数一般的定义形式是:
Template <类型形式参数表>
返回类型 类名<类型名表>::成员函数名(形式参数表)
{
//成员函数定义体
}
二、实验内容
使用 Visual C++ 6.0 分别建立模板函数和模板类,并将其实例化。
三、实验要求
1 、编写一个函数模板,它返回两个值中的最小者,要求能正确处理两个数(整数、双精度数、单个字符),两个字符串等;
2、编写一个类模板,该类实现对一个数组(整型、双精度型等)求和并求平均值。
四、实验课后要求
1、整理课内上机的结果、体会;
2、完成实验报告。
实验代码:
//moban.h
#ifndef MOBAN_H_
#define MOBAN_H_
#include<iostream>
using namespace std;
template <typename T>
T comp_are(T a,T b)
{
if(a>b)
return b;
else
return a;
}
template <class R>
class Array
{
private:
R *arr;
int len;
public:
Array(R *ar,int len);
R sum();
R average();
// ~Array(){delete [] arr;}
};
#endif
//moban.cpp
#include"moban.h"
template <class R>
Array<R>::Array(R *ar,int len)
{
arr=new R[len+1];
for(int i=0;i<len;i++)
arr[i]=ar[i];
}
template <class R>
R Array<R>::sum()
{
R summ=0;
for(int i=0;i<n;i++)
summ=summ+arr[i];
return summ;
}
template <class R>
R Array<R>::average()
{
R summ=0,ave=0;
n=strlen(arr);
for(int i=0;i<n;i++)
summ=summ+arr[i];
return ave=summ/n;
}
/*template <class R>
Array<R>::~Array()
{
delete [] arr;
printf("had delete!\n")
}*/
//user.cpp
#include"moban.h"
int main()
{
//测试模版函数
cout<<"测试模版函数:"<<endl;
int a=1,b=2;
cout<<"int a=1,b=2"<<endl;
cout<<comp_are(a,b)<<endl;
double c=2.3,d=3.5;
cout<<"double c=2.3,d=3.5"<<endl;
cout<<comp_are(c,d)<<endl;
char e='a',f='g';
cout<<"char e='a',f='g'"<<endl;
cout<<comp_are(e,f)<<endl;
char g[]="student",h[]="teacher";
cout<<"char g[]=student,h[]=teacher"<<endl;
cout<<comp_are(g,h)<<endl;
int shuzu_n[]={0,1,2,3,4,5,6,7,8,9};
Array<int> st(shuzu_n,11);
cout<<"sum: "<<st.sum()<<endl;
cout<<"average:"<<st.average()<<endl;
double shuzu_m[]={3.2,3.6,3.9};
Array<double> qt(shuzu_m,4);
cout<<"sum: "<<qt.sum()<<endl;
cout<<"average:"<<qt.average()<<endl;
return 0;
}