首页 > 编程语言 >C++考试题带部分答案函数模板

C++考试题带部分答案函数模板

时间:2024-09-25 11:51:06浏览次数:16  
标签:Compare return cout int C++ 考试题 template 模板

【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

相关文章

  • C++模拟真人鼠标轨迹
    一.API跨语言平台支持鼠标轨迹API底层实现采用C/C++语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。通过DLL封装,开发者可以在C++、Python、易语言、按键精......
  • 开源APP模板分享:包含钓点推荐、气象、路径规划及地震分布等
    对于APP开发来说,找到一个便捷全开源的项目模板可谓是辅助工作的一大利器,分享一个小编最近在用的星图云开发者平台,平台的APP开源库提供APP钓点推荐、气象、路径规划、跑步、卫星碎片、定位、地震分布等模版,可以快速生成行业化应用,开发效率妥妥的。具体是如何使用的,大家可以看一......
  • C++ Practical-1 day6
    系列文章目录点击直达——文章总目录文章目录系列文章目录C++Practical-1day6Overview1.abstract_class抽象类1.1.抽象类的特点1.2.示例:抽象类1.3.注意事项2.virtual_function虚函数2.1.示例:动物叫声的多态性2.2.示例:计算图形的面积2.3.注意事项关于作者C+......
  • Chameleon 模板不替换 python 变量
    我是使用FastAPI和Python的Chameleon新用户。我在模板中有以下代码片段:${ag.name}在python代码中,我有一个类定义为:classAgeGroupInfo:definit(self,名称:str,检查:str):self.name=姓名self.checked=check视图字典包含AgeGroupInfo对象的列表......