模板是泛型编程的基础
一 模板函数
函数模板能够用来创建一个通用的函数。以支持多种不同的形參。避免重载函数的函数体反复设计。
template <typename T>
T max(T a,T b)
{
// 函数的主体
return a > b ? a : b;
}
//代替了
int max(int a,int b)
int max(float a,float b)
跟java中的泛型类型
- 有一个int值交换需求
void myswap(int& a, int& b) {
int temp = 0;
temp = a;
a = b;
b = temp;
}
void main() {
int a = 999;
int b = 666;
myswap(a, b);
cout << "a = " << a << " b = " << b << endl;
system("puase");
}
运行结果:a = 666 b = 999
- 由int类型改成交换char 类型
void myswap(char& a, char& b) {
char temp = 0;
temp = a;
a = b;
b = temp;
}
void main() {
char a = 'a';
char b = 'h';
myswap(a, b);
cout << "a = " << a << " b = " << b << endl;
system("pause");
}
结果:a = h b = a
3. c中可以利用模板函数实现
template <typename T>
void myswap(T& a, T& b) {
T temp = 0;
temp = a;
a = b;
b = temp;
}
void main() {
int a = 999;
int b = 666;
myswap(a, b);
cout << "a = " << a << " b = " << b << endl;
char c = 'a';
char d = 'h';
myswap(c, d);
cout << "c = " << c << " d = " << d << endl;
system("pause");
}
运行结果:
a = 666 b = 999
c = h d = a
二 模板类(泛型类)
为类定义一种模式。使得类中的某些数据成员、默写成员函数的參数、某些成员函数的返回值,能够取随意类型
常见的 容器比如 向量 vector 或 vector 就是模板类
template <class T>
class A
{
public:
A(T a) {
this->a = a;
}
~A() {
}
protected:
T a;
};
template<class T>
class C :public A<T>
{
public:
C(T c,T a):A<T>(a) {
this->c = c;
}
void tell() {
cout << "a:" << a << " c:" << c << endl;
}
private:
T c;
};