C++模板

来源:互联网 发布:java linux cpu使用率 编辑:程序博客网 时间:2024/06/06 06:56
原创 http://blog.sina.com.cn/u/2312748742
一、模板的概念:
模板是实现类属机制的一种工具,它的功能非常强,它是无约束类属机制和约束类属机制的集合。它可以让用户构造模板函数。是STL(标准模板库),是C++的一种扩展。是提供一种重用源代码的一种方法。从而实现泛型编程,即不用管事intchar等类型。
二、模板分为两种:函数模板和类模板,格式如下:
函数格式:template <typename 形参名,typename形参名> 反回类型函数名(参数列表){函数体}
类模板格式:template<typename 形参名,typename 形参名…>   class  类名{}
三、因为模板都是声明的,所以实现的函数等都应放在 .h文件中而不是放在 .cpp文件中。
四、例子:
1)函数模板,新建 test.h文件
template<classmyType,class myType1>
myType1 GetMax(myType a,myType1 b)
{
return a>b?a:b;
}
新建test.cpp文件
#include <iostream.h>
#include "test.h"
int main ()
{

cout<<GetMax(22,45.4)<<endl;
return 0;
}
2)类模板的实现(实现FIFO)
因为同样变成是类模板的声明,是编译器在编译时才进行实例化的,所以类的实现要放在.h文件中。
test.h文件:
//类模板的声明
template <class MyType>
class CMyAry
{
private:
MyType ary[10];
public:
CMyAry() //第一种直接在类定义里实现其函数功能,建议尽量不要使用这种方式,不够清晰
{
for (int i=0;i<10;i++)
{
ary[i]=NULL;
}
}
~CMyAry()
{

}
bool Put(MyType elem);
bool Get(MyType &elem);
};

//这些也是声明,声明类模板的类实现,所以也是放在.h文件而不能放在.cpp中
template<class MyType>
bool CMyAry <MyType>::Put(MyTypeelem)
{
for (int i=0;i<10;i++)
{
if (ary[i]==NULL)
{
ary[i]=elem;
return true;
}
}
return false;
}

template<class MyType>
bool CMyAry<MyType>::Get(MyType&elem)
{
for (int i=0;i<10;i++)
{
if (ary[i]!=NULL)
{
elem=ary[i];
return true;
}
}
return false;
}


新建.cpp文件代码如下:
#include <iostream.h>
#include "test.h"
int main ()
{
// CMyAry<int> ary;
CMyAry<float> ary;
if(!ary.Put(80.2))
    {
cout<<"存值失败"<<endl;
    }
if(!ary.Put(20.5))
    {
cout<<"存值失败"<<endl;
    }
    float temp;
if(!ary.Get(temp))
{
cout<<"读取失败"<<endl;
}
cout<<temp<<endl;
return 0;
}
原创粉丝点击