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类型,如果模板参数传入了,就使用模板参数中传入的类型。
C++模板-33-类模板和函数模板的区别相关推荐
- C++函数模板的详细讲解【函数模板的概念、用法及其模板函数的概念知识】
目录 前言 C++函数模板的使用 函数模板语法 1.模板说明 2.函数定义 3.函数模板调用 模板函数 函数模板和函数重载 嵌套使用函数模板 函数模板和普通函数在一起,调用规则 在Linux中反汇编查 ...
- 模板文件如何调用php函数,模板文件调用方法与路径
:-: **模板调用方法** * * * * * 如何通过微擎进入商城模块: 1,路由规则: 当传入的URL请求中包含一个名为 c.a.do(可选) 的 GET 参数,它即被视为一个路由,例如: ht ...
- php 模板编译类,一个简单的模板类--编译型的(simplet类增强后)
在上次发布的simplet类之后(http://bbs.phpchina.com/thread-85257-1-1.html),发现有很多缺陷,例如不支持多维数组,注释和没有缓存功能,这次我把这些功能 ...
- EyouCMS响应式幽默笑话搞笑短文网站模板/资讯类文章发布网站模板
☑️ 编号:ym216 ☑️ 品牌:EyouCMS ☑️ 语言:php ☑️ 大小:23.4MB ☑️ 类型:幽默笑话 ☑️ 支持:模板
- 基于NOPI的Execl模板转换类,直接将Execl模板转换对应的Entity
1.创建实体属性标记 1 public class CellAttribute : Attribute 2 { 3 /// <summary> 4 /// 5 /// </summa ...
- php 模板编译类,一个简单的模板类--编译型的(simplet类增强后)_PHP教程
在上次发布的simplet类之后(http://bbs.phpchina.com/thread-85257-1-1.html),发现有很多缺陷,例如不支持多维数组,注释和没有缓存功能,这次我把这些功能 ...
- 【C++模板编程入门】模板介绍、模板定义、函数模板、类模板、模板的继承
1.模块的引入 1.1.示例代码 #include <iostream> #include <string>using namespace std;//用template声明T ...
- 6、 函数模板和类模板
函数模板和类模板 前言 C++提供了函数模板(functiontemplate).所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数 ...
- 问模板函数、函数模板,模板类、类模板的区别的问题?
问模板函数.函数模板,模板类.类模板的区别的问题? - 赵保龙 - 博客园 问模板函数.函数模板,模板类.类模板的区别的问题? 在C++中有好几个这样的术语,但是我们很多时候用的并不正确,几乎是互相替 ...
- c++函数模板和类模板
函数模板和类模板 前言 C++提供两种模板机制:函数模板.类模板 类属 -- 类型参数化,又称参数模板 前言 C++提供了函数模板(function template).所谓函数模板,实际上是建立一个 ...
最新文章
- Shell基础命令之echo
- react native与webview通信跳转页面报错:Cannot read property 'setNativeProps' of undefiend
- python安装不了bs4_怎么在python安装bs4
- Matlab——数值计算——单个代数方程 代数方程组
- jQuery选择器大全(48个代码片段+21幅图演示)
- matlab 径向偏振光,径向偏振光的产生与应用..docx
- MATLAB2016下载地址,包含安装教程
- iOS中 语音识别功能/语音转文字教程具体解释 韩俊强的博客
- 高中信息技术——GoldWave音频处理刷题点整理
- Windows核心编程_重绘ListBox样式(仿QQListBox)
- Java连接Redis (key-value存储系统)
- mtk刷机显示连接服务器失败,MTk线刷刷机出现的错误和解决方法
- Linux终端命令工具修改语言切换中文
- Android混淆篇 ijkplayer混淆
- INS/GNSS组合导航(一)-绪论
- 宠物卡牌大赛奖励发放结束公告
- 深度学习经历过程(caffe学习过程)
- matlab 取数组第一行,matlab中如取数组的矩阵的一行出来成为一个向量?
- 学习笔记(2):Java面试:核心考点突击大串讲-Redis的持久化机制
- Flare Network,跨越互操作性三难困境