码迷,mamicode.com
首页 > 其他好文 > 详细

函数模板 类模板

时间:2014-12-27 21:44:48      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:

摘要:学习函数模板的定义,使用;学习类模板的定义和使用。

函数模板

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

 

总结:理解函数模板类模板使用的原因,解决数据类型不同功能相同的函数和类的定义,代码重用。熟练二者的定义使用格式和注意事项。

 

函数模板 类模板

标签:

原文地址:http://www.cnblogs.com/mt-luo/p/4189187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!