c++打卡第二十九天
模板编程
对于模板编程,写template<typename T>
一、函数模板编程
1、编辑模板
表明返回值T 或者无返回值+函数名(T&变量)
2、例题描述
请使用模板参数设计实现双倍功能函数,函数功能要求实现返回值为输入参数的两倍,函数参数应能适应整型、浮点型、双精度型等各种类型,返回值类型与参数一样。
裁判测试程序样例:
#include <iostream> using namespace std; /*请在这里填写答案*/ int main(void){ char c='\0'; int i=0; long l=0; scanf("%c%d%ld",&c,&i,&l); cout<<Double(c)<<endl; cout<<Double(i)<<endl; cout<<Double(l)<<endl; float f=1.1; double d=2.2; scanf("%f%lf",&f,&d); cout<<Double(f)<<endl; cout<<Double(d)<<endl; return 0; }
输入样例:
0
1
200000
3.45
6.789
输出样例:
`
2
400000
6.9
13.578
3、代码实现
template <typename T> T Double(T& a) { return 2*a; }
二、类模板编程
1、模板
class 类名
{
};
2、例题
请使用模板参数设计实现绝对值模板类Absolute,Absolute类功能要求成员函数getValue(void)const计算类数据的绝对值,类数据类型应能适应整型、浮点型、双精度型等各种类型,绝对值类型与类数据一样。
裁判测试程序样例:
#include <iostream> using namespace std; /*请在这里填写答案*/ int main(void){ char c='\0'; int i=0; long l=0; scanf("%c%d%ld",&c,&i,&l); float f=1.1; double d=2.2; scanf("%f%lf",&f,&d); Absolute<char> dc(c); cout<<dc.getValue()<<endl; Absolute<int> di(i); cout<<di.getValue()<<endl; Absolute<long> dl(l); cout<<dl.getValue()<<endl; Absolute<float> df(f); cout<<df.getValue()<<endl; Absolute<double> dd(d); cout<<dd.getValue()<<endl; return 0; }
2、代码实现
template <class T> class Absolute { public: Absolute(T n_num) { this->num=n_num; } T getValue(void)const { return num>0?num:-num; } T num; } ;
3、结果实现