C++模板——定义和调用(非常详细)零基础入门到精通,收藏这一篇就够了

379 篇文章 26 订阅
330 篇文章 4 订阅
本文详细介绍了C++中的模板技术,包括函数模板如`add`,类模板如`Pair`,以及普通类的模板成员函数和类模板的使用方法,展示了模板如何提高代码复用性和灵活性。
摘要由CSDN通过智能技术生成

在 C++ 中,模板是一种强大的工具,可以帮助我们编写通用的代码,提高代码的重用性和灵活性。模板在函数和/或类的结合下,存在诸多花样,其调用方法也各异,本文将以示例代码的形式抛砖引玉。

在这里插入图片描述

函数模板

函数模板是一种通用的函数定义,可以用来创建多个函数版本,以处理不同类型的参数

template <typenameT>``Tadd(Ta, Tb) {`    `return a + b;``}``   ``   ``voidusing_function_template()``{`    `// 调用 add<int>(1, 2),返回 3`    `auto result1 = add<int>(1, 2);`    `auto result11 = add(1,2);`    `// 调用 add<double>(1.5, 2.5),返回 4.0`    `double result2 = add(1.5, 2.5);``}

类模板

类模板允许我们定义通用的类,它可以处理多种不同类型的数据。类模板的语法形式如下:

template <typenameT>``classPair {``private:`    `T first;`    `T second;``public:`    `Pair(Tf, Ts) : first(f), second(s) {}``};``   ``   ``voidusing_class_template()``{`    `Pair<int> p1(1, 2);`    `Pair p1(1, 2);//大于等于C++17, CTAD`    `Pair<double> p2(1.5, 2.5);``}``   

之前的C++版本中,模板类,声明对象时要指定其类型;C++17后,拥有了CTAD(之前浅析CTAD中有提到过),可以由编译器自动推导。

普通类的模板成员函数

在普通类中,可以定义成员函数模板,这些成员函数模板可以接受不同类型的参数。

classMyClass {``public:`    `// 成员函数模板`    `template <typenameT>`    `voidprint(Tvalue) {`        `std::cout << "Value: " << value << std::endl;`    `}``};``   ``   ``intusing_normal_class_function_template() {`    `MyClass obj;`    `obj.print<int>(5);`    `obj.print(5.5);`    `obj.print("Hello");``   ``   `    `return0;``}

普通类的模板函数调用,可以类比模板函数的调用,只是类的模板函数调用是基于对象的。

类模板的成员函数

类模板的成员函数可以是普通的成员函数,也可以是成员函数模板。例如,我们可以为上面的 Pair 类添加一个成员函数模板来比较两个键值对的大小:

template <typenameT>``classPair {``private:`    `T first;`    `T second;``public:`    `Pair(Tf, Ts) : first(f), second(s) {}`    `//普通成员函数`    `TgetFirst() const { return first; }`    `TgetSecond() const { return second; }``   ``   `    `//模板成员函数`    `template<typenameU>`    `boolIsFirstEqual(Uu)`    `{`        `return (u==first)?true:false;`    `}``};``   ``   ``voidusing_calss_template_functions()``{`    `Pair<int> p{3,4};`    `//普通成员函数`    `//直接调用即可`    `p.getFirst();``   ``   ``   `    `//模板成员函数`    `//调用函数需要主动指定类型或有编译器推导`    `p.IsFirstEqual<double>(3.0);``}

在上面的例子中,针对模板类分别定义了其普通成员函数和模板成员函数,使用模板类声明对象后,依次调用了其普通成员函数和模板成员函数。

总结

本文列举了模板函数和/或模板类的使用案例。以代码示例的形式说明了函数模板、类模板、普通成员函数、模板成员函数的使用方法。

为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值