C++进阶1模板的使用 20131010
C++中,我们自己编程虽然不会怎么使用模板,包括函数模板和类模板,但是在大型的项目开发中函数模板和类模板是非常重要的。笔者在**面试的时候忙问道过这个问题,迷迷糊糊的过了,但自己知道不是很清楚,所以整理一下。
1.函数模板的声明
函数模板可以用于创建一个通用的函数,用于支持不同类型的参数,避免因为函数的重载重复设计,他最大的特点是把函数使用的数据类型作为参数。
函数模板的声明形式:
template <typename T>
<ReturnType> <functionName> (Arguments){}
其中template是定义函数模板的关键字,template之后的<>不可以省略,而且内部的typename也是关键字可以使用class,用以说明他后面的标识符是数据类型标识符。这样在以后的这个函数中,凡是希望根据实参数据类型确定数据类型的变量都可以使用数据类型参数标识符来表述。
如何使用?直接向普通的函数那样直接调用。编译器就会生成对应的函数。也就是模板函数。
2.模板函数的生成
模板函数的数据类型参数标识符实际上是一个类型参数,使用函数模板的时候,要将这个形参实例化为确定的数据类型。将行使参数实例化的参数称之为模板函数。
同时可以声明多个参数类型,在一个函数中可以同时使用它们。
在函数模板中,可能会因为数据类型的转换而产生异常。但是函数的重载是支持参数的隐式类型转换,所以如果在定义了函数模板之后,在重载一个函数,他有着明确的参数类型,就不会出现异常了。
3.类模板
声明的格式:
template <class T>
class A{};
这样在类定义体外定义的成员函数,需要使用函数模板。
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class Base{
private:
T value;
public:
Base(){
cout << "Base::constructor" << endl;
}
Base(T v){
this->value = v;
}
T getValue(){
return this->value;
}
virtual ~Base(){
cout << "Base::~Base()" << endl;
}
};
int main()
{
Base<string> b("yangtengfei");
cout << b.getValue() << endl;
Base<int> b1 (3);
cout << b1.getValue ()<< endl;
return 0;
}
追梦的飞飞
于广州中山大学20131010
HomePage: http://yangtengfei.duapp.com