C 习题和解析-模板

2008-02-23 05:39:11来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

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赋初值,通过重载 运算符使n增1,这里n由'a'增1变成'b'。
所以输出为:n=b

-------------------------------------------------------

03.编写一个对具备n 个元素的数组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;
}
本程式的执行结果如下:
a 数组最大值:9
b 数组最大值: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在arr1中的位置:"<<arr1.seek(8)<<endl;
arr1.sort();
cout<<" 排序后:"; arr1.disp();
cout<<"arr2:"<<endl;
cout<<" 原序列:"; arr2.disp();
cout<<" 8.4在arr2中的位置:"<<arr2.seek(8.4)<<endl;
arr2.sort();
cout<<" 排序后:"; arr2.disp();
}
本程式的执行结果如下:
arr1:
原序列:6 3 8 1 9 4 7 5 2
8在arr1中的位置:2
排序后:1 2 3 4 5 6 7 8 9
arr2:
原序列:2.3 6.1 1.5 8.4 6.7 3.8
8.4在arr2中的位置:3
排序后:1.5 2.3 3.8 6.1 6.7 8.4

[1] [2] [3] 下一页




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 习题和解析-重载

下一篇: C 习题和解析-继承和派生

热门词条
热门标签