c++模板
来源:互联网 发布:移动办公软件排名 编辑:程序博客网 时间:2024/06/12 01:25
函数模板与模板函数
函数模版实现了函数参数的通用性,作为一种代码的重用机制,可以大幅度低提高程序设计的效率。
#include<iostream>using namespace std;template<typename T>T max(T a,T b){ cout<<"调用模板函数"; return (a>b)?a:b;}int max(int a,int b)//定义非模板函数,与函数模版max重载 { cout<<"调用非模板函数:"; return (a>b)?a:b;}int main(){ int i1=12,i2=56; double c1=45.3,c2=56.3; char d1='k',d2='m'; cout<<"较大的整数是:"<<max(i1,i2)<<endl; cout<<"较大的双精度浮点数是:"<<max(c1,c2)<<endl; cout<<"较大的字符型数是:"<<max(d1,d2)<<endl; return 0;}
1、函数模版与同名的非模板函数可以重载,调用顺序为:首先寻找一个参数完全匹配的非模板函数,如果找到了就调用它,如果没有找到就寻找函数模板,将其实例化,产生一个匹配的模板函数,若找到了就调用它。
2.函数被重载的时候,在每个函数体内可以执行不同的操作,但同一函数模版实例化后的所有模板函数都必须执行相同的操作。
3.template语句与函数模板定义语句之间不允许有别的语句。
如:
template
int i;
T max(T a,T b)
就是错误的,不能编译
类模板与模板类
#include<iostream>using namespace std;template<typename T>class compare{ public: compare(T a,T b) { x=a; y=b; } T max() { return x>y?x:y; } private: int x,y;};int main(){ compare<int> com1(12,4); compare<double> com2(23.4,45.7); compare<char> com3('h','f'); cout<<"最大值为:"<<com1.max()<<endl; cout<<"最大值为:"<<com2.max()<<endl; cout<<"最大值为:"<<com3.max()<<endl; return 0;}
如果要在类模板体外定义类模板中的成员函数,规定:
1、需要在成员函数定义之前进行模板声明
2、在成员函数名前缀上“类名<类型参数>::”
如:
#include<iostream>using namespace std;template<typename T>//模板声明,T为类型参数 class compare//类模板名为compare { public: compare(T a,T b);//声明构造函数的原型 T max();//声明成员函数为max的原型 private: int x,y;};template<typename T>//模板声明 compare<T>::compare(T a,T b)//在类模板体外定义构造函数 { x=a; y=b;}template<typename T>T compare<T>::max()//在类模板体外定义成员函数max,返回类型T { return x>y?x:y;}int main(){ compare<int> com1(12,4); compare<double> com2(23.4,45.7); compare<char> com3('h','f'); cout<<"最大值为:"<<com1.max()<<endl; cout<<"最大值为:"<<com2.max()<<endl; cout<<"最大值为:"<<com3.max()<<endl; return 0;}
模板类可以有多个类型参数,如:
#include<iostream>using namespace std;template<typename T1,typename T2>class Myclass{ public: Myclass(T1 a,T2 b) { i=a; j=b; } void show() { cout<<"i="<<i<<",j="<<j<<endl; } private: T1 i; T2 j; }; int main() { Myclass<int,double> m1(12,45.6); Myclass<int,char> m2(12,'h'); m1.show(); m2.show(); return 0; }
阅读全文