C++中的类属(泛型)机制——模板
生活随笔
收集整理的這篇文章主要介紹了
C++中的类属(泛型)机制——模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
函數模板
定義:帶有類型參數的函數
格式:
template<class T1,class T2,....> //也可以是typename
<返回值類型><函數名>(<參數表>){......
}
T1、T2是函數模板的類型參數
使用函數模板定義的函數時需要提供具體類型,返回值類型,參數表中的參數類型以及函數體中的局部變量的類型可以是T1,T2等。示例:
template<class T>
void sort(T elements[], unsigned int count){}
函數模板定義了一系列重載的函數,首先必須要對函數模板進行實例化(生成具體的函數),函數模板的實例化通常是隱式的,有時需要在程序中顯式地實例化函數模板。示例:
#include <iostream>
using namespace std;template<class T>
Swap(T &x, T &y){T tmp=x;x=y;y=tmp;
}int main(){int a=1,b=2;double c=1.1,d=1.2;Swap(a,b); //隱式實例化cout<<a<<" "<<b<<endl; Swap<double>(c,d);//顯式實例化cout<<c<<" "<<d<<endl;return 0;
}
函數模板的偏特化、特化:
template<class T1, class T2>
void func(T1 a,T2 b){cout<<"default"<<endl;
}
//特化:全部模板參數特化
template<>
void func(double a,int b){count<<"double int"<<endl;
}
//偏特化:部分函數模板參數特化
template<class T2>
void func(float a,T2 b){cout<<"flaot"<<endl;
}
類模板
定義:如果一個類的成員的類型可變,則稱為類屬性
格式:
template<class T1, class T2, ...>
class <類名>{//類成員說明
}
與函數模板不同的是,類模板只能進行顯式的實例化。如果有需要,可與模板函數結合,利用模板函數隱式實例化模板類。
類模板中的靜態成員:
#include<iostream>
using namespace std;template<class T>
class A{
public:static int x;
};template<class T>
int A<T>::x=12;int main(){A<int> a1,a2;//a1和a2共享一個xA<double>b1,b2;//b1和b2共享一個xcout<<a1.x<<endl;cout<<a2.x<<endl;b1.x=15;cout<<b1.x<<endl;cout<<b2.x<<endl;return 0;
}
總結
以上是生活随笔為你收集整理的C++中的类属(泛型)机制——模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中的两种绑定方式(静态绑定、动态绑
- 下一篇: python安装cvxpy