这篇开始学习类模板相关知识,本篇主要学习什么是类模板,还有类模板和函数模板的区别

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-类模板和函数模板的区别相关推荐

  1. C++函数模板的详细讲解【函数模板的概念、用法及其模板函数的概念知识】

    目录 前言 C++函数模板的使用 函数模板语法 1.模板说明 2.函数定义 3.函数模板调用 模板函数 函数模板和函数重载 嵌套使用函数模板 函数模板和普通函数在一起,调用规则 在Linux中反汇编查 ...

  2. 模板文件如何调用php函数,模板文件调用方法与路径

    :-: **模板调用方法** * * * * * 如何通过微擎进入商城模块: 1,路由规则: 当传入的URL请求中包含一个名为 c.a.do(可选) 的 GET 参数,它即被视为一个路由,例如: ht ...

  3. php 模板编译类,一个简单的模板类--编译型的(simplet类增强后)

    在上次发布的simplet类之后(http://bbs.phpchina.com/thread-85257-1-1.html),发现有很多缺陷,例如不支持多维数组,注释和没有缓存功能,这次我把这些功能 ...

  4. EyouCMS响应式幽默笑话搞笑短文网站模板/资讯类文章发布网站模板

    ☑️ 编号:ym216 ☑️ 品牌:EyouCMS ☑️ 语言:php ☑️ 大小:23.4MB ☑️ 类型:幽默笑话 ☑️ 支持:模板

  5. 基于NOPI的Execl模板转换类,直接将Execl模板转换对应的Entity

    1.创建实体属性标记 1 public class CellAttribute : Attribute 2 { 3 /// <summary> 4 /// 5 /// </summa ...

  6. php 模板编译类,一个简单的模板类--编译型的(simplet类增强后)_PHP教程

    在上次发布的simplet类之后(http://bbs.phpchina.com/thread-85257-1-1.html),发现有很多缺陷,例如不支持多维数组,注释和没有缓存功能,这次我把这些功能 ...

  7. 【C++模板编程入门】模板介绍、模板定义、函数模板、类模板、模板的继承

    1.模块的引入 1.1.示例代码 #include <iostream> #include <string>using namespace std;//用template声明T ...

  8. 6、 函数模板和类模板

    函数模板和类模板 前言 C++提供了函数模板(functiontemplate).所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数 ...

  9. 问模板函数、函数模板,模板类、类模板的区别的问题?

    问模板函数.函数模板,模板类.类模板的区别的问题? - 赵保龙 - 博客园 问模板函数.函数模板,模板类.类模板的区别的问题? 在C++中有好几个这样的术语,但是我们很多时候用的并不正确,几乎是互相替 ...

  10. c++函数模板和类模板

    函数模板和类模板 前言 C++提供两种模板机制:函数模板.类模板 类属 -- 类型参数化,又称参数模板 前言 C++提供了函数模板(function template).所谓函数模板,实际上是建立一个 ...

最新文章

  1. Shell基础命令之echo
  2. react native与webview通信跳转页面报错:Cannot read property 'setNativeProps' of undefiend
  3. python安装不了bs4_怎么在python安装bs4
  4. Matlab——数值计算——单个代数方程 代数方程组
  5. jQuery选择器大全(48个代码片段+21幅图演示)
  6. matlab 径向偏振光,径向偏振光的产生与应用..docx
  7. MATLAB2016下载地址,包含安装教程
  8. iOS中 语音识别功能/语音转文字教程具体解释 韩俊强的博客
  9. 高中信息技术——GoldWave音频处理刷题点整理
  10. Windows核心编程_重绘ListBox样式(仿QQListBox)
  11. Java连接Redis (key-value存储系统)
  12. mtk刷机显示连接服务器失败,MTk线刷刷机出现的错误和解决方法
  13. Linux终端命令工具修改语言切换中文
  14. Android混淆篇 ijkplayer混淆
  15. INS/GNSS组合导航(一)-绪论
  16. 宠物卡牌大赛奖励发放结束公告
  17. 深度学习经历过程(caffe学习过程)
  18. matlab 取数组第一行,matlab中如取数组的矩阵的一行出来成为一个向量?
  19. 学习笔记(2):Java面试:核心考点突击大串讲-Redis的持久化机制
  20. Flare Network,跨越互操作性三难困境

热门文章

  1. 【USB接口程序设计】
  2. 题解:Summation of Four Primes(整数分解四个素数和)
  3. 全网最全python爬虫精进
  4. getParentFile()方法的一些使用技巧
  5. APP注册登录那点事
  6. 每日java5-27
  7. PCB LAYOUT高速信号走线指南
  8. 单片机可以替代PLC吗?
  9. Web前端技术个人学习经验总结
  10. BurpSuite IP代理扩展(IPRotate_Burp_Extension)每次请求切换IP