泛型编程
语法基础:
//template关键字告诉c++编译器,现在我要进行泛型编程,
//typename 告诉c++编译器,T为数据类型,,,请你不要乱报错。。。。。
//T为数据类型,T为数据类型参数化,而已。。。。。int char double
template<typename T>
void myswap3(T &a, T &b)
{
T t = a;
a = b;
b = t;
};
void main()
{
//泛型编程函数的使用方法有2种
int x = 1;
int y = 2;
//自动类型推导,,
//myswap3(x, y);
//具体类型调用
myswap3<int>(x, y);
char c1 = 'a';
char c2 = 'b';
myswap3<char>(c1, c2);
system("pause");
}
1 函数模板可以像普通函数一样被重载
2 C++编译器优先考虑普通函数
3 如果函数模板可以产生一个更好的匹配,那么选择模板
4 可以通过空模板实参列表的语法限定编译器只通过模板匹配
函数模板不允许自动类型转化,普通函数能够进行自动类型转换
#include <iostream> using namespace std; int Max(int a, int b) { cout<<"int Max(int a, int b)"<<endl; return a > b ? a : b; } template<typename T> T Max(T a, T b) { cout<<"T Max(T a, T b)"<<endl; return a > b ? a : b; } template<typename T> T Max(T a, T b, T c) { cout<<"T Max(T a, T b, T c)"<<endl; return Max(Max(a, b), c); } void main() { int a = 1; int b = 2; cout<<Max(a, b)<<endl; cout<<Max<>(a, b)<<endl; cout<<Max(3.0, 4.0)<<endl; cout<<Max(5.0, 6.0, 7.0)<<endl; cout<<Max('a', 100)<<endl; system("pause"); return ; }
类模板语法基础
//类模板的创建
//类中的属性,,类型参数化
//我们把数据类型,进一步 抽象化。。。
//抽象化的数据类型,不能直接使用。。