大家好:
衷心希望各位点赞。
您的问题请留在评论区,我会及时回答。
类模板与函数模板
类模板与函数模板主要有两点:
1.类模板没有自动类型推导的使用方式,只有显式指定类型
2.类模板在模板参数列表中可以有默认参数
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
// 类模板
template<typename NameType, typename AgeType>
class Person
{
public:
NameType m_Name;
AgeType m_Age;
Person(NameType name, AgeType age)
{
m_Name = name;
m_Age = age;
}
void showPerson()
{
cout << "姓名:" << m_Name << endl;
cout << "年龄:" << m_Age << endl;
}
};
void test()
{
// 报错:缺少类模板的参数列表
Person p1("张三", 18);
p1.showPerson();
}
int main(void)
{
test();
system("pause");
return 0;
}
在函数test()中,执行这行代码Person p1(“张三”, 18);的时候,因为类模板没有自动类型推导的使用方式,只有显式指定类型,这就导致了:类模板缺少指定的数据类型,所以报错:缺少类模板的参数列表。
#include <iostream>
#include <Windows.h>
#include <string>
using namespace std;
// 类模板在模板参数列表中可以有默认参数
template<typename NameType = string, typename AgeType = int>
class Person
{
public:
NameType m_Name;
AgeType m_Age;
Person(NameType name, AgeType age)
{
m_Name = name;
m_Age = age;
}
void showPerson()
{
cout << "姓名:" << m_Name << endl;
cout << "年龄:" << m_Age << endl;
}
};
void test()
{
// 因为模板参数列表设置了默认参数,所以模板参数列表可以为空
Person<> p1("张三", 18);
Person<> p2("李四", 20);
p1.showPerson();
p2.showPerson();
}
int main(void)
{
test();
system("pause");
return 0;
}
总结
类模板只能用显式指定类型。
类模板中的参数列表可以设置默认参数。