当前位置: 首页 > news >正文

C++ 模板

文章目录

  • 1 . 前言
  • 2 . 函数模板 - 单typename
  • 2 . 函数模板 - 多typename
  • 3 . 函数模板 - 注意事项
  • 4 . 类模板定义
  • 5 . 类模板成员函数外部实现
  • 6 . 总结


【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485


1 . 前言

  1. C++中有重载,那么C++模板可以理解为根据你的代码自动识别为对应类型重载
  2. 函数模板的定义 template<typename T> 后定义函数
  3. 类模板的定义 template<typename T> 后定义类
  4. 其中typename可以写成class
  5. 可以写多个typename,例如 template<typename T, typename K>

2 . 函数模板 - 单typename

下面代码编译输出的结果可以得出,返回值类型参数列表 中根据实际输入的 数据类型 自动识别重载

#include <iostream>
using namespace std;template <typename T>T add(T a, T b) {return a+b;
}int main()
{cout << add(13,14) << endl;cout << add(13.13,14.14) << endl;return 0;
}

在这里插入图片描述


2 . 函数模板 - 多typename

若需要不一样的类型,如下方所示,模板中增加typename K,因此函数参数列表可以输入两种不同的类型,

#include <iostream>
using namespace std;template <typename T,typename K>K add(T a, K b) {return a+b;
}int main()
{cout << add(13,14) << endl;cout << add(13,14.14) << endl;return 0;
}

在这里插入图片描述


3 . 函数模板 - 注意事项

经过下方示例可以得出,参数列表要与模板定义一致,否则参数列表匹配不到模板导致编译失败
在这里插入图片描述

4 . 类模板定义

经过下方示例可以得出

  1. 类模板的定义逻辑是 template<class AgeType,class MoneyType> 后紧跟着类
  2. 创建对象时写法为 People<int,float>p1(26,50.5);
  3. <> 内描述为传入数据类型或类
  4. p1 为类模板创建的对象
  5. () 内为初始化列表
  6. 而c++的vector和map正是类模板引申出来的应用 std::vectorvec ,std::mapstd::string,intmyMay
#include<iostream>
using namespace std;
#include<string>
//类模板
template<class AgeType,class MoneyType>//自定义了名字和年龄的类型
class People
{
public:People(AgeType m_age, MoneyType m_money){this->age = m_age;this->money = m_money;}void show(){cout << "age:" << this->age << endl;cout << "money:" << this->money << endl;}AgeType age;MoneyType money;
};int main()
{People<int,float>p1(26,50.5);p1.show();return 0;
}

5 . 类模板成员函数外部实现

在类内声明成员函数,在外部写具体实现。外部实现加上类作用域,另外在作用域后声明参数类型。

#include<iostream>
using namespace std;
#include<string>
//类模板
template<class AgeType,class MoneyType>//自定义了名字和年龄的类型
class People
{
public:People(AgeType m_age, MoneyType m_money){this->age = m_age;this->money = m_money;}void show();AgeType age;MoneyType money;
};template<class AgeType,class MoneyType>//自定义了名字和年龄的类型
void People<AgeType,MoneyType>::show()
{cout << "age:" << this->age << endl;cout << "money:" << this->money << endl;
}int main()
{People<int,float>p1(26,50.5);p1.show();return 0;
}

6 . 总结

  1. C++模板编程传统C++编程 的差异性在于 重载的规则 体现的淋漓尽致
  2. C++中有重载,那么C++模板可以理解为根据写的代码自动识别为对应类型重载
  3. 函数模板的定义 template<typename T> 后定义函数
  4. 类模板的定义 template<typename T> 后定义类
  5. 其中typename可以写成class
  6. 可以写多个typename,例如 template<typename T, typename K>

技术交流QQ群 : 745662457
群内专注 - 问题答疑,项目外包,技术研究

图片资源本人在网上下载,若有侵权行为,请告知,本人会立刻删除

相关文章:

  • pythroch abaconda 安装 cuda、版本确定、pytorch 安装
  • Java多线程并发篇----第七篇
  • 【期末不挂科-考前速过系列P4】单片机[接口与总线]——经典例题盘点(带图解析)(第四章:32题搞定基本指令例题))
  • 具备闭环思维的测试才更充分
  • 深入了解网络流量清洗--使用免费的雷池社区版进行防护
  • TortoiseSVN·文件锁定与清理
  • 20240110-Python实现读取当前文件夹下所有视频名称和时长并生成一张表
  • 达梦数据库 模式 研究
  • 【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax类图
  • 【WinForms 窗体】常见的“陷阱”
  • SqueezeNet:通过紧凑架构彻底改变深度学习
  • MySQL之数据类型建表以及约束
  • JQuery异步加载表格选择记录
  • 如何上传苹果ipa安装包?
  • R语言【base】——sample():随机取样和排列
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • angular学习第一篇-----环境搭建
  • chrome扩展demo1-小时钟
  • eclipse(luna)创建web工程
  • ES10 特性的完整指南
  • ESLint简单操作
  • Vim 折腾记
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 机器学习 vs. 深度学习
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 小而合理的前端理论:rscss和rsjs
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #{}和${}的区别?
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $NOIp2018$劝退记
  • %@ page import=%的用法
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (理论篇)httpmoudle和httphandler一览
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • . Flume面试题
  • .Family_物联网
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .net6使用Sejil可视化日志
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET面试题(二)
  • .NET企业级应用架构设计系列之技术选型
  • .net中我喜欢的两种验证码
  • .net中应用SQL缓存(实例使用)