函数模板和类模板的区别在于:
1.函数模板有自动类型推导,但是类模板没有自动类型推导,
只能用显式指定类型来实例化类模板中的对象
2.函数模板不可以有默认参数,但是类模板允许有默认参数
当类模板中有默认参数的时候,就可以把显示指定类型的参数去掉
如果两者的类型是一致的话
分别用两个测试案例进行举例
#include<iostream>
using namespace std;
template<typename agetype,typename nametype>
class person
{
public:
person(agetype age, nametype name)
{
this->m_age = age;
this->m_name = name;
}
void showperson()
{
cout << "姓名为" << this->m_name << "\t" << "年龄为" << this->m_age << endl;
}
agetype m_age;
nametype m_name;
};
template<typename agetype=int, typename nametype=string>
//模板的默认参数,注意类模板中默认参数的写法
class animal
{
public:
animal(agetype age, nametype name)//模板的默认参数
{//注意类模板中默认参数的写法
this->m_age = age;
this->m_name = name;
}
void showanimal()
{
cout << "名字为" << this->m_name << "\t" << "年龄为" << this->m_age << endl;
}
agetype m_age;
nametype m_name;
};
void test01()
{
//1.函数模板有自动类型推导,但是类模板没有自动类型推导,
//只能用显式指定类型来实例化类模板中的对象
//person p1(18, "张三");
//错的,因为类模板中没有自动类型转换
person <int, string>p1(19, "张三");
//只能用显示指定类型的方式进行对象的初始化操作
p1.showperson();
}
void test02()
{
//函数模板不可以有默认参数,但是类模板允许有默认参数
//当类模板中有默认参数的时候,就可以把显示指定类型的参数去掉
//如果两者的类型是一致的话
animal<>p1(18, "小猫");
p1.showanimal();
}
int main(void)
{
test01();
test02();
system("pause");
}