C++03:模板 一.模板的作用 二.函数模板 三.类模板 四.泛型编程原理

模板是C++支持参数化多态的工具,通常有函数模板和类模板

函数模板针对仅参数类型不同的函数

类模板针对数据成员和成员函数类型不同的类

使用模板能够编写出与类型无关的代码

模版分为函数模版类模版

按我的理解,C++设计出模版的作用就是把 数据类型和函数功能进行隔离,能够让代码的通用性更高一些,这就是更加适合封装和重用

二.函数模板

1.使用

函数模板中,会根据传入实参的类型来替换函数模板中形参

//声明
template <class T> 
void Swap(T&a ,T&b){
    ...
}
 
template <typename T> 
void Swap(T& a,T& b){
 
}
//调用
int a,b;
Swap(a,b);

2.例子

注意:一个模板声明对应一个函数

#include <iostream>
#include <vector>

using namespace std;

template <typename T>
inline T const& Max(T const& a, T const& b)
{
    return a < b ? b : a;
}

int main()
{
    int i = 39;
    int j = 20;
    cout << "Max(i,j)= " << Max(i, j) << endl;

    double f1 = 13.5;
    double f2 = 20.7;
    cout << "Max(f1, f2)= " << Max(f1, f2) << endl;

    string s1 = "Hello";
    string s2 = "World";
    cout << "Max(s1, s2)= " << Max(s1, s2) << endl;

    return 0;
}

三.类模板

1.使用

类模板中,根据类<>里面的具体类型来替换类模板中形参类型

//声明
template <class T>
template <typename T>
class A{
   public:
        T a;
        T b;
    T swap(T c,T& d);
 
};
 
//实现
T A<T>::swap(T c,T& d){
...
}
 
//调用
A<int> a;
A<string> b;

2.例子

注意:一个模板声明对应一个类,并且要重载不同的类型

//TestMain.h
 
template <class T>
class A{
 
public:
    A();
    T g(T a,T b);
};
 
template <class T>
A<T>::A(){
 
}
 
template <class T>
T A<T>::g(T a,T b){
    return a+b;
}
 
int main(){
 
    A<int> a;
    std::cout<<a.g(1,2)<<std::endl;
 
    system("pause");
    return 0;
}

四.泛型编程原理