实验8 模板

本文是一份关于C++模板的实验报告,包括函数模板的使用、实例化、重载以及模板类的应用。实验内容涵盖函数模板与普通函数的重载,特定模板函数的作用,并通过实例演示了如何利用STL进行查找和排序操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的和要求

1.能够使用C++模板机制定义重载函数。

2.能够实例化及使用模板函数。

3.能够实例化和使用模板类。

4.应用标准C++模板库(STL)通用算法和函数对象实现查找和排序。

实验内容

1.分析并调试下列程序,了解函数模板的作用。

[html]  view plain  copy
  1. //sy8_1.cpp  
  2. #include<iostream>  
  3. using namespace std;  
  4. template<class T>  
  5.   T max(T a,T b)  
  6. {  
  7.     return a>b? a:b;  
  8. }  
  9. int max(int a,int b)  
  10. {  
  11.  return a>b? a:b;  
  12. }  
  13. int main()  
  14. {  
  15.    int a,b;  
  16.     cout<<" max(6,5)is "<< max(6,5)<<endl;  
  17.    cout<<"max('6','5')is "<<max(6,5)<<endl;  
  18.     return 0;  
  19. }  

(1)写出运行结果,分析编译系统工作过程

结果如下:


分析如下:

原程序中缺少一个与函数模板同名的普通函数,因此程序调试不成功,所以我们需要定义一个与函数模板同名的普通函数用来重载函数模板。

(2)如果定义函数重载,代码如下:

[html]  view plain  copy
  1. int max(int a,int b)  
  2. {  
  3.  return a>b? a:b;  
  4. }  
  5. float max(float a,float b)  
  6. {  
  7.  return a>b? a:b;  
  8. }  

如果程序中有max('6','5');钓鱼哦能够时会出现什么结果?为什么?上机调试分析原因。

程序如下:

[cpp]  view plain  copy
  1. //sy8_1.cpp  
  2. #include<iostream>  
  3. using namespace std;  
  4. template<class T>  
  5.   T max(T a,T b)  
  6. {  
  7.     return a>b? a:b;  
  8. }  
  9. int max(int a,int b)  
  10. {  
  11.  return a>b? a:b;  
  12. }  
  13. float max(float a,float b)  
  14. {  
  15.  return a>b? a:b;  
  16. }  
  17. int main()  
  18. {  
  19.    int a,b;  
  20.     cout<<" max(6,5)is "<< max(6,5)<<endl;  
  21.    cout<<"max('6','5')is "<<max(6,5)<<endl;  
  22.     return 0;  
  23. }  

运行结果如下:


原因:定义的单精度型和整型普通函数都是为了重载函数模板,而程序中a和b的值都是整型,所以运行结果跟原来的一样。

2.分析并调试下列程序,了解特定模板函数的作用。

[cpp]  view plain  copy
  1. //sy8_2.cpp  
  2. #include<iostream>  
  3. using namespace std;  
  4. template<typename T>  
  5. T max(T a,T b)  
  6. {  
  7.     return a>b?a:b;  
  8. }  
  9. int max(int a,int b)  
  10. {  
  11.     return a>b?a:b;  
  12. }  
  13. char *max(char *a,char *b)  
  14. {  
  15.     return strcmp(a,b)>0?a:b;  
  16. }  
  17. int main()  
  18. {  
  19. char china,japan;  
  20. *a=china;  
  21. *b=japan;  
  22.     cout<<"max(6,5)is "<<max(6,5)<<endl;  
  23.     cout<<"max(\"china\",\"japan\")is "<<max("china","japan")<<endl;  
  24.     return 0;  
  25. }  

(1)写出运行结果

(2)说明特定模板函数的作用。

(3)声明一个类模板,利用它实现10个整数、浮点数和字符的排序。

(4)生命一个整型数组,使用它实现C++标准模板库(STL)中的查找算法find()进行数据的查找,然后应用排序算法sort()对数据进行升序和降序排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值