C++学习笔记之 模板|函数模板|类模板

函数模板

类模板

  • 定义:函数模板是建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型 )可以不具体指定,而是用一个虚拟的类型来代替(用标识符占位),在函数调用时,编译器根据传入实参自动推断数据类型 。
  • 语法格式
    template <typename T> // 也可用class代替typename ,T为类型参数,可多个,用逗号分隔
    返回值类型 函数名(T 参数) {// 函数体
    }

    例如,实现交换两个变量值的函数模板

    template <typename T> 
    void Swap(T& a, T& b) {T temp = a;a = b;b = temp;
    }

  • 使用方式:编译器根据调用时传入的实参类型,对函数模板进行实例化,生成具体类型的函数。比如int num1 = 1, num2 = 2; Swap(num1, num2);,编译器会生成void Swap(int&, int&) 这样针对int类型的函数实例 。也可显式指定类型,如Swap<double>(3.14, 2.71); 。
  • 作用:避免为不同数据类型重复编写功能相似的函数,提高代码复用性 ,减少代码冗余。
  • 定义:类模板将数据的类型参数化,用于创建通用类,使类的成员函数和成员变量能适应多种数据类型 。
  • 语法格式
    • 类声明
          template <typename T1, typename T2, ...> // 类型参数可多个,用逗号分隔
      class 类名 {// 类的成员变量和成员函数声明
      };

      类外定义成员函数

      template <typename T1, typename T2, ...> 
      返回值类型 类名<T1, T2, ...>::函数名(参数列表) {// 函数体
      }

      例如,定义一个表示坐标的类模板:

      template <typename T1, typename T2>
      class Point {
      public:Point(T1 x, T2 y) : x(x), y(y) {}void print() const;
      private:T1 x;T2 y;
      };template <typename T1, typename T2>
      void Point<T1, T2>::print() const {std::cout << "x: " << x << ", y: " << y << std::endl;
      }

    • 使用方式:使用类模板创建对象时,必须显式指明具体的数据类型,编译器据此实例化出具体类。如Point<int, int> p(1, 2); ,编译器会用int替换模板中的T1T2 ,生成针对int类型的Point类实例 。
    • 作用:能针对不同数据类型创建相似功能的类,避免为每种类型单独编写类,提高代码的可维护性和复用性 。

二者区别

  • 实例化方式:函数模板可由编译器根据实参自动实例化,也可显式指定类型;类模板必须显式指定类型参数来实例化 。
  • 功能侧重:函数模板主要针对可通用化的函数逻辑;类模板关注的是创建通用类,涵盖数据成员和成员函数 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则入门到精通

​ 一、正则表达式入门​ 正则表达式本质上是一串字符序列&#xff0c;用于定义一个文本模式。通过这个模式&#xff0c;我们可以指定要匹配的文本特征。例如&#xff0c;如果你想匹配一个以 “abc” 开头的字符串&#xff0c;正则表达式可以写作 “^abc”&#xff0c;其中 …

对备忘录模式的理解

对备忘录模式的理解 一、场景1、题目【[来源](https://kamacoder.com/problempage.php?pid1095)】1.1 题目描述1.2 输入描述1.3 输出描述1.4 输入示例1.5 输出示例 2、理解需求 二、不采用备忘录设计模式1、代码2、问题3、错误的备忘录模式 三、采用备忘录设计模式1、代码1.1 …

86.方便的double转string属性 C#例子 WPF例子

在C#开发中&#xff0c;属性封装是一种常见的设计模式&#xff0c;它可以帮助我们更好地控制数据的访问和修改&#xff0c;同时提供更灵活的功能扩展。今天&#xff0c;我们就来探讨一个简单而优雅的属性封装示例&#xff1a;Power 和 PowerFormatted。 1. 问题背景 在实际开…

bun 版本管理工具 bum 安装与使用

在使用 node 的过程中&#xff0c;我们可能会因为版本更新或者不同项目的要求而频繁切换 node 版本&#xff0c;或者是希望使用更简单的方式安装不同版本的 node&#xff0c;这个时候我们一般会用到 nvm 或者类似的工具。 在我尝试使用 bun 的时候&#xff0c;安装前第一个想到…

GRE,MGRE

GRE&#xff1a;静态过程&#xff0c;有局限性 R1 &#xff1a; [r1]interface Tunnel 0/0/0 --- 创建一个虚拟的隧道接口 [r1-Tunnel0/0/0]ip address 192.168.3.1 24 --- 给隧道接口分配一个 IP 地址 [r1-Tunnel0/0/0]tunnel-protocol gre --- 定义接口的封装方式 [r1-Tun…

游戏无法启动?XINPUT1_3.dll 丢失的终极解决方案

当你兴奋地启动一款新游戏时&#xff0c;突然弹出一个错误提示——‘程序无法启动&#xff0c;因为计算机中丢失 XINPUT1_3.dll’。这种问题在 PC 玩家中非常常见&#xff0c;尤其是运行一些较老的游戏时。XINPUT1_3.dll 是 DirectX 运行库的关键组件&#xff0c;缺失会导致游戏…

用大语言模型学文学常识

李白的诗句“右军本清真”中的“清真”并非指伊斯兰教信仰&#xff0c;而是对王羲之&#xff08;王右军&#xff09;人格和艺术境界的赞美。以下是对这一问题的详细分析&#xff1a; “清真”的古代含义 在魏晋至唐代的语境中&#xff0c;“清真”一词多用于形容人的品格高洁、…

css炫酷的3D水波纹文字效果实现详解

炫酷的3D水波纹文字效果实现详解 这里写目录标题 炫酷的3D水波纹文字效果实现详解项目概述技术栈核心实现1. 基础布局2. 渐变背景3. 文字效果实现3.1 基础样式3.2 文字漂浮动画 4. 水波纹效果4.1 模糊效果4.2 水波动画 5. 交互效果 技术要点项目难点与解决方案总结 项目概述 在…

八、重学C++—动态多态(运行期)

上一章节&#xff1a; 七、重学C—静态多态&#xff08;编译期&#xff09;-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/146999362?spm1001.2014.3001.5502 本章节代码&#xff1a; cpp/dynamicPolymorphic.cpp CuiQingCheng/cppstudy - 码云 - 开源中…

eventEmitter实现

没有做任何异常处理,简单模拟实现 事件对象的每一个事件都对应一个数组 /*__events {"事件1":[cb1,cb2],"事件2":[cb3,cb4],"事件3":[...],"事件4":[...],};*/class E{__events {};constructor(){}//注册监听回调on(type , callbac…

Mysql 中 B 树 vs B+ 树

&#x1f333; 什么是 B树 和 B树&#xff1f; 它们都是多路平衡查找树&#xff08;M-Way Search Tree&#xff09;&#xff0c;用于提升磁盘读写效率&#xff0c;常用于数据库&#xff08;如 MySQL&#xff09;、操作系统中的索引结构。 &#x1f50d; B树 和 B树 的核心区别…

蓝桥云客---九宫幻方

1.九宫幻方 - 蓝桥云课 九宫幻方 题目描述 小明最近在教邻居家的小朋友小学奥数&#xff0c;而最近正好讲述到了三阶幻方这个部分&#xff0c;三阶幻方指的是将1~9不重复的填入一个3 * 3的矩阵当中&#xff0c;使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又…

OrangePi5Plus开发板不能正确识别USB 3.0 设备 (绿联HUB和Camera)

1、先插好上电&#xff08;可正确识别&#xff09; 2、上电开机后插入USB 3.0 设备&#xff0c;报错如下&#xff0c;只能检测到USB2.0--480M&#xff0c;识别不到USB3.0-5Gbps&#xff0c;重新插拔也不行 Apr 4 21:30:00 orangepi5plus kernel: [ 423.575966] usb 5-1: re…

LiveData 和 MutableLiveData 的区别

LiveData 和 MutableLiveData 的区别 主要在于是否可以修改数据&#xff0c;但它们的工作原理基本相同。下面我们深入对比它们的行为、特性&#xff0c;以及它们在 ViewModel 和 UI 层中的使用方式。 1. LiveData 和 MutableLiveData 的基本区别 特性LiveDataMutableLiveData可…

SDK中窗口调用

存在窗口A和B的win32程序 , 当点击窗口A中的按钮后会弹出窗口B #include <windows.h>// 窗口 B 的窗口过程 LRESULT CALLBACK WindowProcB(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg) {case WM_DESTROY:PostQuitMessage(0);break;default:ret…

进行性核上性麻痹:饮食调理为健康护航

进行性核上性麻痹是一种复杂的神经退行性疾病&#xff0c;目前虽无法根治&#xff0c;但合理的健康饮食有助于缓解症状、提高患者生活质量。 高蛋白质食物在患者饮食中占据重要地位。鱼肉&#xff0c;尤其是富含 Omega-3 脂肪酸的三文鱼、鳕鱼等&#xff0c;不仅蛋白质含量丰富…

【Windows+Cursor】从0到1配置Arxiv MCP Server,实现论文自主查询、下载、分析、综述生成

1. 安装UV Installation | uv powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" 将安装路径添加到环境变量 C:\Users\xxxxxx\.local\bin 2. git clone 代码 git clone https://github.com/blazickjp/arxiv-mcp-server.git…

WPF 教程:给 TreeView 添加 SelectedItem 双向绑定支持(MVVM-Friendly)

&#x1f332;WPF 教程&#xff1a;给 TreeView 添加 SelectedItem 双向绑定支持&#xff08;MVVM-Friendly&#xff09; 在 WPF 的 MVVM 应用中&#xff0c;TreeView 是非常常见的控件&#xff0c;但它有个“顽固”的缺陷&#xff1a; ❗它的 SelectedItem 不是依赖属性&…

Linux环境下内存错误问题排查与修复

最近这几天服务器总是掉线&#xff0c;要查一下服务器的问题。可以首先查看一下计算机硬件&#xff0c;这是一台某鱼上拼凑的服务器&#xff1a; sudo lshw -shortH/W path Device Class Description system NF5270M3 (To be filled by O…

函数和模式化——python

一、模块和包 将一段代码保存为应该扩展名为.py 的文件&#xff0c;该文件就是模块。Python中的模块分为三种&#xff0c;分别为&#xff1a;内置模块、第三方模块和自定义模块。 内置模块和第三方模块又称为库内置模块&#xff0c;有 python 解释器自带&#xff0c;不用单独安…