计算机等级考试二级C++习题与解析:模板

来源: 作者: 时间:2007-07-19 点击:

01.分析以下程序的执行结果 
#include<iostream.h> 
template <class T> 
T max(T x,T y) 

return (x>y?x:y); 

void main() 

cout<<max(2,5)<<","<<max(3.5,2.8)<<endl; 

解: 
本题说明函数模板的使用方法。max()函数是一个函数模板,它返回两个参数中的较大者。在调用时自动联编相应的max()函数。所以输出为:5,3.5 
注意:T为类型形式参数,可包含基本数据类型,也可以包含类类型,不能是普通的数据变量。 

02.
分析以下程序的执行结果 
#include<iostream.h> 
template <class T> 
class Sample 

T n; 
public: 
Sample(T i){n=i;} 
void operator++(); 
void disp(){cout<<"n="<<n<<endl;} 
}; 
template <class T> 
void Sample<T>::operator++() 

n+=1; // 
不能用n++;因为double型不能用++ 

void main() 

Sample<char> s(’a’); 
s++; 
s.disp(); 

解: 
本题说明类模板的使用方法。Sample是一个类模板,由它产生模板类Sample<char>,通过构造函数给n赋初值,通过重载++运算符使n1,这里n’a’1变成’b’ 
所以输出为:n=b

03.编写一个对具有个元素的数组x[]求最大值的程序,要求将求最大值的函数设计成函数模板。 
解: 
max()函数设计成一个函数模板。 
本题程序如下: 
#include<iostream.h> 
template <class T> 
T max(T x[],int n) 

int i; 
T maxv=x[0]; 
for(i=1;i<n;i++) 
if(maxv<x[i]) 
maxv=x[i]; 
return maxv; 

void main() 

int a[]={4,5,2,8,9,3}; 
double b[]={3.5,6.7,2,5.2,9.2}; 
cout<<"a
数组最大值:"<<max(a,6)<<endl; 
cout<<"b
数组最大值:"<<max(b,5)<<endl; 

本程序的执行结果如下: 
数组最大值:
数组最大值:9.2 


04.
编写一个使用类模板对数组进行排序、查找和求元素和的程序。 
解: 
设计一个类模板template<class T>class Array,用于对T类型的数组进行排序、查找和求元素和,然后由此产生模板类Array<int>Array<double> 
本题程序如下: 
#include<iostream.h> 
#include<iomanip.h> 
template <class T> 
class Array 

T *set; 
int n; 
public: 
Array(T *data,int i){set=data;n=i;} 
~Array(){} 
void sort(); // 
排序 
int seek(T key); // 
查找指定的元素 
T sum(); // 
求和 
void disp(); // 
显示所有的元素 
}; 
template<class T> 
void Array<T>::sort() 

int i,j; 
T temp; 
for(i=1;i<n;i++) 
for(j=n-1;j>=i;j--) 
if(set[j-1]>set[j]) 

temp=set[j-1];set[j-1]=set[j];set[j]=temp; 


template <class T> 
int Array<T>::seek(T key) 

int i; 
for(i=0;i<n;i++) 
if(set[i]==key) 
return i; 
return -1; 

template<class T> 
T Array<T>::sum() 

T s=0;int i; 
for(i=0;i<n;i++) 
s+=set[i]; 
return s; 

template<class T>

void Array<T>::disp() 

int i; 
for(i=0;i<n;i++) 
cout<<set[i]<<" "; 
cout<<endl; 

void main() 

int a[]={6,3,8,1,9,4,7,5,2}; 
double b[]={2.3,6.1,1.5,8.4,6.7,3.8}; 
Array<int>arr1(a,9); 
Array<double>arr2(b,6); 
cout<<" arr1:"<<endl; 
cout<<" 
原序列:"; arr1.disp(); 
cout<<" 8

     [收藏] [推荐] [评论] [打印] [关闭]
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册