【1】写出下面程序的运行结果。
#include<iostream>
using namespace std;
template <class Type1,class Type2>
class myclass{
public:
myclass(Type1 a,Type2 b)
{ i=a; j=b;
}
void show()
{ cout<<i<<′ ′<<j<<′\n′;
}
private:
Type1 i;
Type2 j;
};
int main()
{ myclass<int,double> ob1(10,0.23);
myclass<char,char*> ob2(′X′,"This is a test.");
ob1.show();
ob2.show();
return 0;
}
【8.13】写出下面程序的运行结果。
#include<iostream>
using namespace std;
template<class T>
T min(T a,T b)
{
if(a<b)return a;
else return b;
}
int main()
{ int n1=5,n2=81;
double d1=1.3,d2=5.6;
cout<<"较小整数:"<<min(n1,n2)<<endl;
cout<<"较小实数:"<<min(d1,d2)<<endl;
return 0;
}
【8.14】写出下面程序的运行结果。
#include<iostream.h>
template<class T>
class Sample{
T d;
public:
Sample(){}
Sample(T i){d=i;}
void disp(){cout<<"d="<<d<<endl;}
friend Sample<T>operator+(Sample<T>s1,Sample<T>s2)
{
Sample<T>tmp;
tmp.d=s1.d+s2.d;
return tmp;
}
};
void main()
{
Sample<int>s1(2),s2(3),s3;
Sample<double>s4(2.5),s5(8.4),s6;
s3=s1+s2;
s6=s4+s5;
s3.disp();
s6.disp();
}
【2】写出下面程序的运行结果。
#include<iostream>
using namespace std;
class coord
{ int x,y;
public:
coord(int x1,int y1){x=x1;y=y1;}
int getx(){return x;}
int gety(){return y;}
int operator<(coord& c);
};
int coord::operator<(coord& c)
{ if(x<c.x)
if(y<c.y)
return 1;
return 0;
}
template<class obj>
obj& min(obj& o1,obj& o2)
{
if(o1<o2)
return o1;
return o2;
}
int main()
{
coord cl(5,12);
coord c2(3,16);
coord c3=min(cl,c2);
cout<<"最小的坐标:("<<c3.getx()<<","<<c3.gety()<<")"<<endl;
double d1=2.99;
double d2=3.48;
cout<<"最小的数:"<<min(d1,d2)<<endl;
return 0;
}
【3】指出下列程序中的错误,并说明原因。
#include<iostream>
using namespace std;
template <typename T> //模板声明,其中为T类型参数
class Compare{ //类模板名为Compare
public:
Compare(T a, T b)
{ x=a; y=b;}
T min();
private:
T x,y;
};
template <typename T>
T Compare::min()
{ return (x<y)? x:y;
}
int main()
{
Compare com1(3,7);
cout<<"其中的最小值是:"<< com1.min()<<endl;
return 0;
}
【解】
在类模板体外定义成员函数min时“T Compare::min()” 是错误的,应在成员函数名前缀上“类名<类型参数>::”, 应该将此语句改为:
T Compare<T>::min()
主函数中语句“Compare com1(3,7);”是错误的,因为首先要将模板实例化,才能由模板生成对象。应该将此语句改为:
Compare <int> com1(3,7);
修改后,正确的程序如下:
#include<iostream>
using namespace std;
template <typename T> //模板声明,其中为T类型参数
class Compare{ //类模板名为Compare
public:
Compare(T a, T b)
{ x=a; y=b;}
T min();
private:
T x,y;
};
template <typename T>
T Compare<T>::min()
{ return (x<y)? x:y;
}
int main()
{ Compare <int> com1(3,7);
cout<<"其中的最小值是:"<< com1.min()<<endl;
return 0;
}
程序的运行结果是:
其中的最小值是:3
【4】已知下列主函数
int main()
{ cout<<min(10,5,3)<<endl;
cout<<min(10.0,5.0,3.0)<<endl;
cout<<min('a','b', 'c')<<endl;
return 0;
}
设计一个求三个数中最小者的函数模板,并写出调用此函数模板的完整程序。
【解】
求三个数中最小者的函数模板如下:
template <class Type>
Type min(Type a,Type b,Type c)
{ a= (a<b? a:b);
return (a<c?a:c);
}
完整的程序如下:
#include<iostream>
using namespace std;
template <class Type>
Type min(Type a,Type b,Type c) //声明函数模板
{ a= (a<b? a:b);
return (a<c?a:c);
}
int main()
{ cout<<min(10,5,3)<<endl;
cout<<min(10.0,5.0,3.0)<<endl;
cout<<min('a','b', 'c')<<endl;
return 0;
}
【5】 编写一个函数模板,求数组中的最大元素,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整数也可以是双精度类型。
【解】 实现本题功能的程序如下:
#include<iostream>
using namespace std;
template <class Type> //函数模板
Type max(Type *Array,int size)
{ int i,j=0;
for (i=1;i<size-1;i++)
if (Array[i]>Array[j])
{ j=i; }
return Array[j];
}
int main()
{ int intArray[]={11,12,13,14,7,8,9};
double doubleArray[]={11.2,12.3,13.2,14.5,14.8,8.7,9.3};
cout<<max(intArray,7)<<endl;
cout<<max(doubleArray,7)<<endl;
return 0;
}
【6】 编写一个函数模板,使用冒泡排序将数组内容由小到大排列并打印出来,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整数也可以是双精度型。
【解】 实现本题功能的程序如下:
#include <iostream.h>
template <class Type>
void sort(Type *Array,int size)
{ int i,j;
for (i=0;i<size-1;i++)
for (j=0;j<size-i-1;j++)
if (Array[j]>Array[j+1])
{ Type temp= Array[j];
Array[j]=Array[j+1];
Array[j+1]=temp;
}
for (i=0;i<=size-1;i++)
cout<<Array[i]<<" ";
cout<<endl;
}
int main()
{ int intArray[]={11,12,13,14,7,8,9};
double doubleArray[]={11.2,12.3,13.2,14.5,14.8,8.7,9.3};
sort(intArray,7);
sort(doubleArray,7);
return 0;
}
【7】 建立一个用来实现求三个数和的类模板(将成员函数定义在类模板的内部), 并写出调用此类模板的完整程序。
【解】 实现本题功能的程序如下:
#include<iostream>
using namespace std;
template<typename T> // 模板声明,其中为T类型参数
class Sum{ // 类模板名为Sum
public:
Sum(T a,T b,T c)
{ x=a; y=b; z=c;
}
T add()
{ return x+y+z;
}
private:
T x,y,z;
};
int main()
{ Sum<int> s1(3,7,9);
//用类模板定义对象s1,此时T被int替代
Sum<double> s2(12.34,56.78,67.89);
//用类模板定义对象s2,此时T被double替代
cout<<"三个整数的和是:"<<s1. add()<<endl;
cout<<"三个双精度数的和是:"<<s2.add()<<endl;
return 0;
}
【8】将7题改写为在类模板外定义各成员函数。
【解】 实现本题功能的程序如下:
#include<iostream>
using namespace std;
template<typename T> //模板声明,其中为T类型参数
class Sum{ //类模板名为Sum
public:
Sum(T a,T b,T c); //声明构造函数的原型
T add(); //声明成员函数add的原型
private:
T x,y,z;
};
template <typename T> //模板声明
Sum<T>::Sum(T a, T b,T c) //在类模板体外定义构造函数
{ x=a; y=b; z=c;
}
template <typename T> //模板声明
T Sum<T>:: add() //在类模板体外定义成员函数add,返回类型为T
{ return x+y+z;
}
int main()
{ Sum<int> s1(3,7,9); //用类模板定义对象s1,此时T被int替代
Sum<double> s2(12.34,56.78,67.89);
//用类模板定义对象s2,此时T被double替代
cout<<"三个整数的和是:"<<s1. add()<<endl;
cout<<"三个双精度数的和是:"<<s2. add()<<endl;
return 0;
}
标签:Compare,return,cout,int,C++,考试题,template,模板 From: https://blog.csdn.net/workflower/article/details/142473180