C++模板-33-类模板和函数模板的区别
这篇开始学习类模板相关知识,本篇主要学习什么是类模板,还有类模板和函数模板的区别
1.类模板语法
template <class T>
类
模板声明下面是函数就是函数模板,如果是类就叫类模板
2.一个类模板例子
下面写一个Person类 类模板,看看如何定义和如何使用类模板
#include <iostream>
#include <string>
using namespace std;
//类模板
template <class TypeName, class TypeAge>
class Person
{
public:
Person(TypeName name, TypeAge age)
{
this->m_Name = name;
this->m_Age = age;
}
TypeName m_Name;
TypeAge m_Age;
void showInfo()
{
cout<< "Name: " << m_Name << " Age: " << m_Age << endl;
}
};
void test01()
{
Person<string, int> p1("张三", 18);
p1.showInfo();
}
int main()
{
test01();
system("pause");
return 0;
}
3. 类模板和函数模板区别
现在我们学习了类模板和函数模板,语法格式都差不多,第一行是template开头,后面跟着如果是函数,就叫函数模板,如果跟着是类,就叫类模板。那么类模板和函数模板有什么区别呢?
3.1 类模板不支持参数自动推导
前面学习过函数模板中参数,支持参数类型自动推导,这个在类模板中就不行,必须要明确给出参数类型才可以,否则报错。
上面29行语法是正确,30行编译不过去,会提示模板参数缺失。
3.2 类模板在模板参数列表可以有默认参数
上面的类模板代码中,模板参数列表有两个
#include <iostream>
#include <string>
using namespace std;
//类模板
template <class TypeName, class TypeAge = int>
class Person
{
public:
Person(TypeName name, TypeAge age)
{
this->m_Name = name;
this->m_Age = age;
}
TypeName m_Name;
TypeAge m_Age;
void showInfo()
{
cout<< "Name: " << m_Name << " Age: " << m_Age << endl;
}
};
void test01()
{
Person<string> p1("张三", 18);
p1.showInfo();
}
int main()
{
test01();
system("pause");
return 0;
}
如果给定了第二个参数是int类型,所以第29行在模板参数列表中可以写成上面样子。这里设置了默认,如果模板参数不写,自然就是采用默认的int类型,如果模板参数传入了,就使用模板参数中传入的类型。
还没有评论,来说两句吧...