初窥template

来源:互联网 发布:新浪乐居php面试题 编辑:程序博客网 时间:2024/06/10 05:28

在C++的学习中。我深刻体会到,类,模板是C++实现面向对象的主要内容,不仅增加了代码的可阅读性,更能清晰的表达算法,比C的流水式设计要更具有结构性。今天对于template有一个初步的认识,总结如下:

      template的引入:对于函数的重载(overload)常常会遇到这样的问题:对于一个两数相加的函数add(a,b),对于a,b可以是(int,int),也可以是(char,char)或者是(int,int,int),(char,char,char),(int,int,char)(重载:对于函数的形参的类型,个数,或二者一起的改变,而用相同的函数名),但若单单只用重载。则需要写更多的函数代码。其实表达的是同一种算法,这样程序的时间和空间性能都被拖延,运用模板则可以解决这一问题。

  

 

 template的分类:分为函数模板和类模板

1    函数模板的声明与定义:

template<class或typename T>                 此处的class与定义类的class有区别T 函数名{定义}

示例代码:

template <class T>T add(Ta,T b){return (a+b);}



 

2   类模板的声明与定义:

template <class或typename T>class myclass{......}

示例代码:

#ifndef ClassTemplate_HH

#define ClassTemplate_HH

template<typename T1,typename T2> //定义类时进行模板的声明

class myClass{

private:

     T1 I;

     T2 J;

public:

     add(T1 I,T2 J) //

     void show();

};

//这是构造函数

//注意这些格式

template <typename T1,typename T2> //进行参数定义时的模板声明

myClass<T1,T2>::add(T1 a,T2 b):I(a),J(b){}/在这里将形参所获得的值传给私有变量I J,在show()函数中使用;

//这是void show();

template <typename T1,typename T2> //函数定义时的模板声明

void myClass<T1,T2>::show()

{

     cout<<"I+J="<<I+J<<endl;

}

        由类模板的定义可以看出:不管是定义什么,只要需要将类型参数化,都要进行模板的声明。

3     无类型的模板声明

对于不是类型的东西,模板也可以对其进行模板化,如这样的定义:

template<class T, int a>
func1(T m,30)func2(T m,40)...


此处的a可以是任意int型的数。

总结:无论是对于函数,类还是已声明类型的变量,template的最大特点就是可以将类型或者别的东西变量化,使得重载更加简便。(初始认知)

这只是初窥template,做程序体会下~!

原创粉丝点击