题1.分析以下程序的执行结果 #include<iostream.h> template <class T> T abs(T x) { return (x>0?x:-x); } void main() { cout<<abs(-3)<<","<<abs(-2.6)<<endl; } 解: abs()是一个函数模板,它返回参数的绝对值。在调用时自动联编相应的abs()函数。 所以输出为:3,2.6
----------------------------------------------
題2.分析以下程序的执行结果 #include<iostream.h> template<class T> class Sample { T n; public: Sample(){} Sample(T i){n=i;} Sample<T>&operator+(consta Sample<T>&); void disp(){cout<<"n="<<n<<endl;} }; template<class T> Sample<T>&Sample<T>::operator+(const Sample<T>&s) { static Sample<T> temp; temp.n=n+s.n; return temp; } void main() { Sample<int>s1(10),s2(20),s3; s3=s1+s2; s3.disp(); } 解: Sample为一个类模板,产生一个模板类Sample<int>,并建立它的三个对象,调用重载运算符+实现s1与s2的加法运算,将结果赋给s3。 所以输出为:n=30
----------------------------------------------------
题3.编写一个函数模板,它返回两个值中的较小者,同时要求能正确处理字符串。 解: 这里设计一个函数模板template<class T> T min(T a,T b),可以处理int、float和char 等数据类型,为了能正确处理字符串,添加一个重载函数专门处理字符串比较,即char *min(char *a,char *b)。 本题程序如下: #include<iostream.h> #include<string.h> template<class T> T min(T a,T b) { return (a<b?a:b); } char *min(char *a,char *b) { return (strcmp(a,b)<0?a:b); } void main() { double a=3.56,b=8.23; char s1[]="Hello",s2[]="Good"; cout<<"输出结果:"<<endl; cout<<" "<<a<<","<<b<<"中较小者:"<<min(a,b)<<endl; cout<<" "<<s1<<","<<s2<<"中较小者:"<<min(s1,s2)<<endl; } 输出结果: 3.56,8.23中较小者:3.56 Hello,Good中较小者:Good
----------------------------------------------------
题4.设计一个数组类模板Array<T>,其中包含重载下标运算符函数,并由此产生模板类Array<int>和Array<char>,使用一些测试数据对其进行测试。 解: 本题程序如下: #include<iostream.h> #include<iomanip.h> template <class T> class Array { T *elems; int size; public: Array(int s); // 构造函数 ~Array(); T& operator[](int); // 重载下标运算符 void operator=(T); // 重载等号运算符 }; template <class T> Array<T>::Array(int s) { size=s; elems=new T[size]; for(int i=0;i<size;i++) elems[i]=0; } template<class T> Array<T>::~Array() { delete elems; } template<class T> T& Array<T>::operator[](int index) { return elems[index]; } template<class T> void Array<T>::operator=(T temp) { for(int i=0;i<size;i++) elems[i]=temp; } void main() { int i,n=10; Array<int> arr1(n); // 产生整型模板类及其对象arr1 Array<char> arr2(n); // 产生字符型模板类及其对象arr2 for(i=0;i<n;i++) { arr1[i]='a'+i; // 调用重载运算符 arr2[i]='a'+i; } cout<<" ASCII码 字符"<<endl; for(i=0;i<n;i++) cout<<setw(8)<<arr1[i]<<setw(8)<<arr2[i]<<endl; } 本程序的执行结果如下: ASCII码 字符 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j
 
2/2 首页 上一页 1 2 |