三种传入方式
1.自定传入的类型---直接显示对象的数据类型
2.参数模板化---将对象中的参数变为模板进行传递
3.整个类模板化---将这个对象类型模板化进行传递
#include<iostream>
using namespace std;
#include<string>
#include<typeinfo>
// 类模板做函数参数(三种方式)
//1.自定传入的类型---直接显示对象的数据类型
//2.参数模板化---将对象中的参数变为模板进行传递
//3.整个类模板化---将这个对象类型模板化进行传递
template<class T1,class T2>
class Person
{
public:
Person(T1 name,T2 age)
{
this->m_Name=name;
this->m_Age=age;
}
void ShowPerson()
{
cout<<"姓名:"<<m_Name<<"\t"<<"年龄:"<<m_Age<<endl;
}
public:
T1 m_Name;
T2 m_Age;
};
//1.指定传入类型
void PrintPerson1(Person<string ,int> &p1)
{
p1.ShowPerson();
}
void test01()
{
Person<string ,int>p1("唐三",20);
PrintPerson1(p1);
}
//2.参数模板化
template <class T1,class T2>
void PrintPerson2(Person <T1,T2> &p2)
{
p2.ShowPerson();
//typeid:可以查看数据类型
//包含头文件 #include<typeinfo>
cout<<"T1的类型:"<<typeid(T1).name()<<endl;
cout<<"T2的类型:"<<typeid(T2).name()<<endl;
}
void test02()
{
Person<string,int>p2("无心",19);
PrintPerson2(p2);
}
//整个类模板化
template <class T>
void PrintPerson(T &p3)
{
p3.ShowPerson();
cout<<"T的类型:"<<typeid(T).name()<<endl;
}
void test03()
{
Person <string,int> p3("石昊",25);
PrintPerson(p3);
}
int main()
{
test01();
cout<<"---------------------------"<<endl;
test02();
cout<<"---------------------------"<<endl;
test03();
system("pause");
return 0;
}
Ss:表示string类型
i:表示int类型