#include<iostream>
#include<string>
using namespace std;
/ 模板可以实现数组的大小排序比较
*/
//交换模板
template<typename T>
void myswap(T& a,T& b)
{
T temp = a;
a = b;
b = temp;
}
//排序模板
template<typename T>
void mysort(T arr[],int len)
{
for (int i = 0; i < len; i++)
{
int max = i;
for (int j = i + 1; j < len; j++)
{
if (arr[max] < arr[j])
max = j;
}
if (max != i)
{
myswap(arr[max], arr[i]);
}
}
}
//打印模板
template<typename T>
void print(T arr[],int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i];
}
}
//调用
//int 类型调用模板
void test()
{
int arr[] = { 1,7,9,4,5,6 };
int num = sizeof(arr) / sizeof(int);
mysort(arr,num);
print(arr, num);
}
//调用
//char 类型调用模板
void test02()
{
char arr[] = "fdafdc";
int num = sizeof(arr);
mysort(arr, num);
print(arr, num);
}
//自定义类型模板
//类模板定义
template<class A,class B>
class person
{
public:
person(A name,B age)
{
this->myname = name;
this->myage = age;
}
void show()
{
cout << "myname=" << this->myname << endl;
cout << "myage=" << this->myage << endl;
}
public:
A myname;
B myage;
};
//指定传入类型
void print(person <string,int>&p)
{
p.show();
}
void test3()
{
person<string, int>p("小洁洁",40);
print(p);
}
//
//void func()
//{
//
person<string ,int>p1("小洁洁",10);
// person p1("小洁洁",10);//错误。不能自动类型推导
//制定函数模板中的默认参数
template<class A,class B=int>
//
person<string>p1("dh",11);
//
// p1.show();
//}
class base1
{
public:
void show1()
{
cout << "base成员函数调用" << endl;
}
};
class base2
{
public:
void show2()
{
cout << "base1的成员数调用" << endl;
}
};
template<class S>
class mybase
{
public:
S s;
void func1()
{
s.show1();
}
void func2()
{
s.show2();
}
};
void teest()
{
//mybase<base1> m;
//m.func1();
}
int main()
{
//terr();
//test02();
//teest();
test3();
system("pause");
return 0;
}