C++类模版2
·
类模版实例化出的对象,向函数传参的方式。
1.一共三种传入的类型 --直接显示对象的数据类型
2.参数模版化 --将对象中的参数编程模版进行传递
3.整个类模版化 --将这个对象类型 模版化进行传递
#include <iostream>
using namespace std;
//类模版对象做函数参数
template <typename T1,typename T2>
class Person{
public:
Person(T1 name, T2 age)
{
this->m_Name=name;
this->m_Age=age;
}
void showPerson()
{
cout<<"Name: " << m_Name << ", Age: " << m_Age << endl;
}
T1 m_Name;
T2 m_Age;
};
//1.指定传入类型
//使用引用的方式进行传入,这样我们就可以直接拿到这个person的本体
void printPerson(Person<string,int> &p)
{
p.showPerson();
}
void test01()
{
Person<string,int> p("孙悟空",100);
printPerson(p);
}
int main() {
test01();
return 0;
}
将参数模版化
//将参数模版化
template <typename T1, typename T2>
void printPerson2(Person<T1,T2> &p)
{
p.showPerson();
cout<<"T1的类型为: "<<typeid(T1).name()<<endl;
cout<<"T2的类型为: "<<typeid(T2).name()<<endl;
}
void test02()
{
Person<string,int> p("猪八戒",99);
printPerson2(p);
}
int main() {
//test01();
test02();
return 0;
}

因此最终其输出为这个。
将整个类都模版化
template <typename T>
void printPerson3(T &p)
{
p.showPerson();
cout<<"T1的类型为: "<<typeid(T).name()<<endl;
//这里的T是Person<string,int>类型
cout<<"T2的类型为: "<<typeid(typename T::T2).name()<<endl; //使用typename来获取类模版中的类型
}
//将整个类都模版化
void test03()
{
Person<string,int> p("唐僧",30);
p.showPerson();
cout<<"T1的类型为: "<<typeid(string).name()<<endl;
cout<<"T2的类型为: "<<typeid(int).name()<<endl;
}
int main() {
//test01();
test03();
return 0;
}
在实际开发中,第一种最实用。
更多推荐
所有评论(0)