码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • c++取经之路(其八)——基础模板


    我认为的模板其实就是个懒人工具,你来弄个模板,编译器自动给你生成对应的函数。

    函数模板:


    定义:函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器。

    我们来举个加法的例子:
    基本写法:

    1. template<typename T>
    2. T add( T& x, T& y)
    3. {
    4. return x+y;
    5. }

    格式类似于:
    template
    返回值类型 函数名(参数列表){}

    注意:typename是用来定义模板参数关键字,也可以使用class(切记:不能使用struct代替class)

    这就是我们最简单的写法,我们怎么用呢?

    1. template<typename T>
    2. T add(T x, T y)
    3. {
    4. return x + y;
    5. }
    6. int main()
    7. {
    8. cout <<add(1, 2)<
    9. cout << add(1.1, 2.) << endl;
    10. return 0;
    11. }

    结果:

    匹配机制:

     对于非模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用非模板函数而不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数, 那么将选择模板。

    例如:

    1. int Add(int left, int right)
    2. {
    3. return left + right;
    4. }
    5. // 通用加法函数
    6. template
    7. auto Add(T1 left, T2 right)
    8. {
    9. return left + right;
    10. }
    11. void Test()
    12. {
    13. cout<
    14. cout<
    15. }
    16. int main()
    17. {
    18. Test();
    19. return 0;
    20. }

    运行结果:

    类模板:

    基本定义:

    1. template<class T1, class T2, ..., class Tn>
    2. class 类模板名
    3. {
    4. // 类内成员定义
    5. };

    注意:我们类模板不建议定义和声明到两个.h和.cpp文件里面,如果想分离一般都在.h文件进行,一般这样写:

    1. template<typename T>
    2. class Sql
    3. {
    4. public:
    5. Sql(int x=4);
    6. private:
    7. T* _data;
    8. int size;
    9. int capacity;
    10. };
    11. template<typename T >
    12. Sql::Sql(int x)
    13. {
    14. _data = new T[x];
    15. _capacity = 0;
    16. _size = 0;
    17. }

    模板注意:

    1.模板运行时不检查数据类型,也不保证类型安全,相当于类型的宏替换。

    2.类模板是一个类家族,模板类是通过类模板实例化的具体类。

    3.模板是代码复用的重要手段。

    4..模板类是一个家族,编译器的处理会分别进行两次编译,其处理过程跟普通类不一样。

  • 相关阅读:
    给github项目贡献代码
    对于复杂的数学模型,怎样利用 MATLAB 的优化工具箱进行准确的参数估计和模型拟合?
    八条关于小酒馆的避坑提醒
    高级前端手写面试题
    Dubbo3的Triple协议踩坑记录
    问答:计算机网络技术是什么?
    代码随想录Day19 LeetCode T669修剪二叉搜索树 LeetCode T108将有序数组转化为二叉搜索树 T538 把二叉搜索树转化为累加树
    QtCreator设置代码自动格式化
    巨控GRM530无线远从模块的实际使用时间,速度快
    【软件设计】软件开发的核心原则
  • 原文地址:https://blog.csdn.net/zgwnb666/article/details/138168352
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号