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

2023-11-18

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

 

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

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++模板-33-类模板和函数模板的区别 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定

随机推荐

  • 计算两个数之和,不能用+ = 运算符

    在lintcode的一个简单的算法题 计算两数的和 不能用 运算符 对于这个题 我是一点思路都没有 不用 那能用什么计算呢 于是在网上找了找答案 答案其实很简单 主要是涉及到运算 我是觉得应该记一下 所以才将这个题写下来 具体代码 异或 运
  • centos 6.5 连接MySQL 提示:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:

    centos 6 5 连接MySQL 提示 ERROR 1045 28000 Access denied for user root localhost using password NO CentOs 第一次登入MySQL 默认超级用户
  • 深度学习中的优化算法之AdaGrad

    之前在https blog csdn net fengbingchun article details 123955067 介绍过SGD Mini Batch Gradient Descent MBGD 有时提到SGD的时候 其实指的是MB
  • 链表和线性表的优缺点

    链表和线性表的优缺点 作为我们最先接触的两个数据结构 链表和线性表的优缺点都较为明显 并且二者互相补足 文章目录 链表和线性表的优缺点 线性表 线性表的组成 线性表的缺点 线性表的优点 链表 链表的组成 链表的优点 链表的缺点 总结 线性表
  • Spring系列之BeanFactory扩展(BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor)

    先来看几个问题 BeanFactoryPostProcessor是做什么的 BeanDefinitionRegistryPostProcessor是干什么的 BeanFactoryPostProcessor和BeanDefinitionRe
  • Uni-app 之uParse 富文本 样式

    富文本如果内容过多 会导致有些列不出现在屏幕内 如果只被挡的只有一两列 显示出来也不拥挤 可以修改样式使其全部展示出来 增加tag style
  • 什么是项目管理?项目经理应该如何进行管理?

    项目管理 一是指一种管理活动 一种有意识地按照项目的特点和规律 对项目进行组织管理的活动 二是指一种管理学科 以项目管理活动为研究对象的一门学科 它是探求项目活动科学组织管理的理论与方法 就是把各种知识 技能 手段和技术应用于项目活动之中
  • unity2D横版游戏教程10-场景控制

    我们让角色掉出地图时重置游戏 我们在Hierarchy那里创建一个一个空项目 命名为DeathLine 也就是死亡线 我们给它添加一个盒体碰撞器 调整一下碰撞器 我们要把这个碰撞器当做触发器使用 所以我们勾选Is Trigger 我们既然用
  • DevOps初识

    博主入职了 正在学习一些在学校没有接触过的东西 在此进行记录 背景 随着软件发布迭代的频率越来越高 传统的 瀑布型 开发 测试 发布 模式已经不能满足快速交付的需求 打破开发和运维的壁垒 聪明的大佬创造出一套模式 就是devops 当我们提
  • qt中treeView的使用

    参考博客 1 https blog csdn net CSND Ayo article details 71106067 utm medium distribute pc relevant none task blog BlogCommen
  • CSS学习总结

    CSS学习视频 狂神说 CSS 目录 简介 什么是CSS 什么是CSS CSS发展史 快速入门 CSS的3种导入方式 选择器 基本选择器 层次选择器 结构伪类选择器 属性选择器 美化网页元素 为什么要美化网页 字体样式 文本样式 阴影 超链
  • sonarqube代码规则配置

    sonarqube做代码检测 可以自定义配置规则库的规则和绑定项目 方法如下 1 进入sonarqube质量配置页面 选择某一语言 点击右侧设置按钮 选择复制 2 输入名称后 点击复制 进入配置页面 3 点击修改项目 可以选择当前已存在的项
  • 谷歌浏览器崩溃之错误代码:RESULT_CODE_MISSING_DATA

    打开谷歌 突然页面崩溃了 所有插件提示也用不了了 页面显示崩溃的错误代码是 RESULT CODE MISSING DATA 我在网上找到一个大神的解决方法 亲测有限 解决方法 首先在谷歌浏览器右键打开属性 在箭头所指的位置复制粘贴 no
  • 用远见超越未见

    2022年是极不平凡的一年 外部的世界局势逐步恶化 内部的新冠疫情转段迈向新阶段 2022年也是伟大的一年 党的二十大胜利召开 党的二十大报告就 推进国家安全体系和能力现代化 坚决维护国家安全和社会稳定 作出专章部署 明确指出 国家安全是民
  • AD16出现your licence is already used on computer的解决办法

    AD16出现报错警告如何解决 AD16持续出现报错警告 AD为什么会报错 如何解决报错 AD16持续出现报错警告 AD为什么会报错 在使用破解版AD的时候 你用的注册表跟别人的注册表一样 也就是说你两用的是同一个安装包 用的是相同的注册码
  • 【第一天】Linux基础命令1

    聊一聊 Hello 好久不见 好久没更新了 因为小编现在是一名大三专科生 正在准备升本 所以正在全力进行备考 备考的过程中 也算是属于没怎么碰过电脑的那种 以前学的知识都忘的差不多了 于是 我决定每天抽出两到三个小时 来写一篇知识总结 这样
  • VUE3 + TS + MapboxGL + 拖拽定位

    VUE3 TS MapboxGL 拖拽定位 mapbox的拖拽定位 相对于其他api来说还是相对容易实现的 只需要在中心创建图层 之后在地图移动时候一直更改图层的中心即可 首先 安装部分不过多描述 官网安装地址 之后 要使用mapboxGL
  • Linux启动网卡时出现RTNETLINK answers: File exists错误解决方法

    一 问题描述 VMware中克隆虚拟机是经常的事情 虽然如此 用到虚拟机时 本人还是喜欢新安装一个操作系统 针对服务器的应用 在安装操作系统时 一并安装好 并且也花不了多少时间 但最近需要大量的配置一样的虚拟机进行测试 故安装了一个模板虚拟
  • 几种基本放大电路详解

    可提前了解的文章 运算放大器 运放 介绍 注意 此处我们采用的是Multisim软件仿真 链接中有详细安装教程 注意 仿真只是数学运算 实际情况的话 就不是数学运算那么简单 有很多复杂的因数在里面 所以具体情况要参照实际电路搭建 比如说 之
  • C++模板-33-类模板和函数模板的区别

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