首页 > 代码库 > 函数模板 类模板
函数模板 类模板
摘要:学习函数模板的定义,使用;学习类模板的定义和使用。
函数模板:
template <typename 类型参数>返回类型 函数名(模板形参表){ 函数体 }
特点:1.函数模板可以重载(比如形参数量不同的情况)。
2.定义的时候,template <typename 类型参数>到下面一个语句之间不允许插入其他语句!
3.如果程序中有和函数模板名称相同的非函数模板函数,则优先调用它。
例子:
#include<iostream>using namespace std;template <typename T> //声明函数模板T max(T x,T y) //定义{ return (x>y)?x:y; //求大值}int main(){ int i1=19,i2=32; double d1=39.2,d2=43; char c1=‘k‘,c2=‘s‘; cout<<"The max of two is:"<<max(i1,i2)<<endl; cout<<"The max of two is:"<<max(d1,d2)<<endl; cout<<"The max of two is:"<<max(c1,c2)<<endl; return 0;}
输出:
类模板:所谓类模板,实际上就是建立一个通用类,其数据成员、成员函数的返回类型和形参类型不具体指定,使用一个虚拟的类型来代表。使用类模板来简化那些功能相同但是数据类型不同的类的声明。使用类模板定义对象的时候,系统会根据实参的类型来取代类模板中虚拟类型,从而实现不同类的功能。
格式:
template <typename 类型参数>class 类名{ 类成员声明};
注意:1.在定义类模板的时候,数据成员好说。但是,成员函数定义也相应的分为类内定义和类外定义,在类外定义的时候需在成员函数定义之前声明模板。
template <typename 类型参数>
函数类型 类名<类型参数>::成员函数名(形参表)
{...}
举例:类内定义成员函数
#include<iostream>using namespace std;template <typename T> //声明函数模板class twoadd //定义{ public: twoadd(T a,T b) {x=a;y=b;} T add() //定义成员函数,若省略T,则默认int {return x+y;} private: T x; T y;};int main(){ twoadd<double> tt(1.2,2.3); cout<<"add two ="<<tt.add()<<endl; return 0;}
类外定义成员函数:
#include<iostream>using namespace std;template <typename T> //声明函数模板class twoadd //定义{ public: twoadd(T a,T b) {x=a;y=b;} T add(); //声明成员函数,若省略T,则默认int private: T x; T y;};int main(){ twoadd<double> tt(1.2,2.3); cout<<"add two ="<<tt.add()<<endl; return 0;}template <typename T> //再次声明类模板T twoadd<T>::add() //类外定义成员函数 { return x+y;}
二者输出都是:
add two =3.5
总结:理解函数模板类模板使用的原因,解决数据类型不同功能相同的函数和类的定义,代码重用。熟练二者的定义使用格式和注意事项。
函数模板 类模板
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。