C++基础(10)——函数模板和类模板

2023-11-11

前言

本文主要介绍了C++中函数模板和类模板基本知识

6.1:函数模板

模板函数的定义

template<typename T>+函数的定义或声明

模板函数的两种使用方法(编译器自动推测、显示指定T的类型)

注意事项:模板一定要确定指出T的数据类型才可以使用;T由编译器自动推导出来,如果类型不一致也不可以使用

6.2:普通函数和模板函数的区别和调用规则

普通函数可以发生自动类型转换。模板函数如果使用自动类型推导不能发生自动类型转换;模板函数如果使用显示指定类型可以发生自动类型转换。

普通函数和模板函数的调用规则

1:如果普通函数和模板函数重名且都可以调用,优先调用普通函数

2:通过空模板的方式强制调用模板函数

3:模板函数也可以发生重载

4:如果模板函数可以产生更好的匹配,优先使用模板函数(防止普通函数的自动类型转换)

6.3:模板函数的局限性(函数模板具体化)

模板函数传入的参数不是万能的,有一定的限制

通过运算符重载可以实现自定义数据类型的比较

也写一个指定T类型的模板函数,之后编译器会优先调用这个函数

6.4:类模板概念和函数模板比较

类模板定义:

类模板可以有默认参数类型

使用类模板的时候要指定数据类型,编译器不会自己推导,模板函数会自己推导

类模板中的成员函数不是在一开始就创建的,而是在运行的时候创建的

6.5:类模板对象做函数的参数

 1:直接指定参数类型void func1(Person<string, int> &p) 

 2:参数模板化

打印一下T1,T2的类型typeid(T1).name()

3:将整个类进行模板化

6.6:类模板和继承

当子类继承的父类是一个模板函数时,要先指定T的类型,要不然编译器不知道给子类开辟多大的内存空间。同理父类模板想用sizeof打印大小时也需要先指定T的类型

如果想灵活指定父类模板中T的类型,子类也需要模板化

6.7:类模板的类外实现

6.8:类模板的分文件编写和解决

将类的定义和成员函数的实现分开写,在调用模板类创建对象,使用类外实现的成员函数会报错,因为类的成员函数是在运行时才创建

main.cpp

person.h

person.cpp

如果只调用类内实现的showName()函数是不会报错的

因为main.cpp中只包含了person.h文件,main.cpp是不知道showAge()具体是怎么实现的,编译的时候会报错

将类的定义和类成员函数放在同一个文件中,然后再main.cpp中进行包含就不会报错了

person.hpp

6.9:类模板和友元

1:全局友元函数类内实现

main.cpp

person.hpp

打印一下T1、T2数据类型

2:全局函数类外实现

总结

以上就是本文的全部内容,非常感谢你能看到这

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

C++基础(10)——函数模板和类模板 的相关文章

随机推荐

  • 嵌入式学习笔记--GEC6818--bmp图片显示

    一 开发环境 1 ARM linux 2 ubuntu16 04 安装了GCC arm linux gcc 5 4 0 安装方法ubuntu16 04https blog csdn net qq 40592257 article detai
  • Ubuntu下FastDFS的安装

    准备工作 刚安装好的linux系统没有设置root用户密码的 下边介绍如何设置root用户的密码 由于ubtun系统默认是没有激活root用户的 需要我们手工进行操作 在命令行界面下 或者在终端中输入如下命令 sudo passwd 或者s
  • 删除数字问题

    已知n位数字正整数a 去除任意k位数 使剩下数字按原次序排列成新正整数 使其最大 C语言 include
  • 最全地理数据下载网址

    晓码创作 整理不易 转载引用请写明出处 一 国内 常见遥感影像下载网址 https mp weixin qq com s xzNGmz1fgb3IqbOV EN1Aw 1 http data cma cn site index html 中
  • Modbus驱动库—libmodbus驱动库的使用

    文章目录 为什么要使用驱动库 libmodbus简介 libmodbus常用函数 Windows平台libmodbus 使用 1 获取源代码 2 生成config h配置文件 3 编写测试代码 4 编译测试代码 Linux平台下libmod
  • C语言循环链表实现约瑟夫环问题

    问题描述 约瑟夫环问题 1 问题描述 设有编号为1 2 n的n n 0 个人围成一个圈 每个人持有一个密码m 从第一个人开始报数 报到m时停止报数 报m的人出圈 再从他的下一个人起重新报数 报到m时停止报数 报m的出圈 如此下去 直到所有人
  • 轻松入门自然语言处理系列 14 Linear-CRF模型

    文章目录 前言 一 Log Linear模型与逻辑回归 1 Log Linear模型 2 从Log Linear模型到逻辑回归 二 Linear CRF模型Inference 1 Linear CRF模型定义 2 Linear CRF模型I
  • 2021年安全员-A证免费试题及安全员-A证考试技巧

    题库来源 安全生产模拟考试一点通公众号小程序 安全员 A证免费试题考前必练 安全生产模拟考试一点通每个月更新安全员 A证考试技巧题目及答案 多做几遍 其实通过安全员 A证很简单 1 判断题 生产经营规模较小的 可以不建立应急救援组织 但应当
  • Each module has to have a unique path

    在android工作中从仓库中down下来的时候 首次运行出现 Each module has to have a unique path 使用android studio开发工具 因为同事一起把 iml文件给上传上去了 每次builde都
  • RISC-V MCU开发 (七):代码调试

    RISC V MCU开发 七 代码调试 MounRiver Studio MRS 配合GD Link WCH Link JLink等在线调试下载器 可支持GDVFx系列 CH56x CH57x CH58x CH32Fx CH32Vx等RIS
  • ‘入门级’程序员面试关键字眼解答

    JSP 全名为 Java Server Pages 中文名叫java服务器页面 其根本是一个简化的Servlet 设计 它是在传统的网页HTML文件 中插入Java程序段 Scriptlet 和JSP标记 tag 从而形成JSP文件 后缀名
  • LaTeX/Markdown中如何在字母上下方插入字母数字

    1 一般的写法 P Y c k X x frac P Y c k prod j P X j x j Y c k sum k P Y c k prod j P X j x j Y c k 效果展示为 P Y
  • 【QT学习教程2】文件操作功能实现

    目录 0 前言 一 界面布局 二 文件操作功能的实现 2 1 思路整理 2 2 初始化界面功能的实现 2 3 判断当前文本是否可以 修改 的功能实现 2 4 新建文本功能的实现 2 5 保存功能的实现 2 6 另存为功能的实现 2 7 文件
  • 使用多线程或异步技术提高图片抓取效率

    导语 图片抓取是爬虫技术中常见的需求 但是图片抓取的效率受到很多因素的影响 比如网速 网站反爬机制 图片数量和大小等 本文将介绍如何使用多线程或异步技术来提高图片抓取的效率 以及如何使用爬虫代理IP来避免被网站封禁 概述 多线程和异步技术都
  • STM32与物联网02-网络数据收发

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • Android Bundle类

    今天发现自己连Bundle类都没有搞清楚 于是花时间研究了一下 根据google官方的文档 http developer android com reference android os Bundle html Bundle类是一个key
  • 蓝桥杯Python常用基础知识

    转化整数 a int x 把a变为函数 a lambda x x 2 a 2 以空格结尾 for i in range 10 range 0 10 if i 2 i 2 0 print i end print print n 把字符串的内容
  • mvn deploy部署报错

    问题描述 使用idea侧边栏进行公司项目的部署 双击即可部署到nexus 但是使用命令mvn clean mvn deploy部署则报错 查看maven状态 配置好maven环境变量 使用命令mvn v 查看版本信息 其中会显示图片如下 这
  • UnityAnimator游戏运行后动画不播放

    问题 动画预览正常 运行后观察Animator正常执行动画 但是场景中没有播放动画 解决方法 将Animator的CullingMode改为AlwaysAnimate
  • C++基础(10)——函数模板和类模板

    前言 本文主要介绍了C 中函数模板和类模板基本知识 6 1 函数模板 模板函数的定义 template