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

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

时间:2024-09-25 11:51:06浏览次数:8  
标签: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`[https://winsdk.cn/]()底层实现采用C/C++语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。通过DLL封装,开发者可以在C++、Pytho......
  • QT C++ 自学积累 『非技术文』
    QTC++自学积累『非技术文』最近一段时间参与了一个QT项目的开发,使用的是C++语法,很遗憾的是我之前从来没有接触过C++,大学没有开过这堂课,也没用自己学习过,所有说上手贼慢,到现在为止其实也不是很清楚具体的开发技巧,毕竟是参与,东一复制西一粘贴的,就拉倒了。里面用到了很多......
  • 【C++】vector-1
    文章目录1.vector的介绍及使用1.1vector的介绍1.2vector的使用1.2.1vector的定义1.2.2vectoriterator的使用1.2.3vector空间增长问题1.2.4vector增删查改1.vector的介绍及使用1.1vector的介绍1.vector是表示可变大小数组的序列容器。2.就像数组一样,vec......
  • C++模拟真人鼠标轨迹
    一.API跨语言平台支持鼠标轨迹API底层实现采用C/C++语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。通过DLL封装,开发者可以在C++、Python、易语言、按键精......
  • onnxruntime c++ 推理例子
    资源释放的问题。onnxruntime的对象release是无效的,从接口源码上只是将指针赋空。并未实际释放。要实现释放,需要以指针形式实现。一个例子如下:#include<onnxruntime_cxx_api.h>voidtestimage(){Matimage=imread("ae14.jpg",IMREAD_UNCHANGED); //创建会话选项 O......
  • 开源APP模板分享:包含钓点推荐、气象、路径规划及地震分布等
    对于APP开发来说,找到一个便捷全开源的项目模板可谓是辅助工作的一大利器,分享一个小编最近在用的星图云开发者平台,平台的APP开源库提供APP钓点推荐、气象、路径规划、跑步、卫星碎片、定位、地震分布等模版,可以快速生成行业化应用,开发效率妥妥的。具体是如何使用的,大家可以看一......
  • C++: unordered系列关联式容器
    目录1.unordered系列关联式容器1.1unordered_map1.2unordered_set2.哈希概念3.哈希冲突4.闭散列5.开散列博客主页:酷酷学感谢关注!!!正文开始1.unordered系列关联式容器在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到......
  • 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对象的列表......
  • 自梳理C++八股
    1.左右值引用的理解回答:“左右值引用是C++11引入的一项重要特性,用于优化资源管理和提升性能。具体来说:左值引用(LvalueReference):左值引用可以类比为对象的别名,它允许多个引用共享一个实体对象,常用于函数参数传递以避免对象拷贝。左值引用只能绑定到一个命名的持久对象,适合用......