100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C++模板-33-类模板和函数模板的区别

C++模板-33-类模板和函数模板的区别

时间:2020-02-10 23:22:55

相关推荐

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 类模板在模板参数列表可以有默认参数

上面的类模板代码中,模板参数列表有两个<string, int>,下面代码修改一下,把int设置默认参数,调用类模板的使用可以不写int,代码如下

#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类型,如果模板参数传入了,就使用模板参数中传入的类型。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。