C++模板与模板的重载

2023-10-27

#include <iostream>
#include <string>
template <typename T>
void Swap(T &, T &);
template <typename T>
void Swap(T[], T[], int);
void show (int *, int n);
struct student;
template <> void Swap<student>(student &s1, student &s2);
void showstu(const student &);
//模板函数只是给出了一个生成函数定义的方案,并没有定义函数,函数的定义是由编译器完成的
//对于一个函数名,可以有如下几个版本
//非模板函数
//模板函数
//模板的函数的显示具体化
//以上三个的重载版本
//调用优先级非模板函数 > 显示具体化模板函数 > 模板函数

//根据传入参数类型的不同,生成相应的版本,这个过程叫做实例化
//显示具体化和隐式具体化统称为实例化

struct student
{
    int id;
    double grade;
    std::string name;
};
int main()
{
    using namespace std;
    int a,b;
    double x,y;
    string p,t;
    cout << "please input a(int) and b(int)";
    cin >> a >> b;
    cout << "now a is " << a << " b is " << b <<endl;
    Swap(a,b);
    cout << "function Swap after " << "a is " << a << " b is " << b <<endl;
    cout << "please input x(double) and y(double)";
    cin >> x >> y;
    cout << "now x is " << x << "y is " << y <<endl;
    Swap(x,y);
    cout << "function Swap after " << "x is " << x << " y is " << y <<endl;
    cout << "please input p(string) and t(string)";
    cin >> p >>t;
    cout << "now p is " << p << "t is " << t;
    Swap(p,t);
    cout << "function Swap after " << "p is " << p << " t is " << t;
    cout << "\n模板类重载" <<endl;
    int num1[] {1,2,3,4,5};
    int num2[] {5,4,3,2,1};
    show(num1, 5);
    cout << endl;
    show(num2, 5);
    cout << "Swap after " <<endl;
    Swap(num1,num2,5);
    show(num1,5);
    cout << endl;
    show(num2,5);
    cout << "\n具体化 " <<endl;
    student s1{20215014,91.5,"wang"},
            s2{20215066,96.4,"zhang"};
    showstu(s1);
    showstu(s2);
    Swap(s1,s2);
    showstu(s1);
    showstu(s2);
    return 0;
}

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

template <typename T>
void Swap(T a[], T b[],int n)
{
    int temp;
    for(int i=0;i<n;i++){
        temp = a[i];
        a[i] = b[i];
        b[i] = temp;
    }
}

void show(int *a, int n)
{
    for(int i=0;i<n;i++){
        std::cout << a[i] << " ";
    }
}
void showstu(const student &s)
{
    std::cout << "id\t" << "grade\t" << "name" <<std::endl;
    std::cout << s.id << "\t" << s.grade << "\t" << s.name << std::endl;
}

//具体化的声明需要<type_name>但是模板函数的实现可以不用

template <> void Swap(student &s1, student &s2)
{
    double t1;
    int t2;
    t1 = s1.grade;
    s1.grade = s2.grade;
    s2.grade = t1;
    t2 = s1.id;
    s1.id = s2.id;
    s2.id = t2;
}

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

C++模板与模板的重载 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • Android混淆机制

    java代码的混淆 常见的混淆的方式有两种 Proguard 免费 和 DexGuard 要钱 Proguard 与 DexGuard 的关系 DexGuard 是基于 ProGuard 的 这就是为什么它是如此的原因很容易升级到DexGu
  • css 实现文字渐变以及文字颜色流动

    文字渐变需要了解以下属性 background image 背景色 background clip 此属性规定背景的绘制区域 有四个值 border box 背景被裁剪到边框盒 padding box 背景被裁剪到内边距框 content
  • 【C语言】32个关键词

    目录 一 auto 二 short 三 int 四 long 五 float 六 double 七 char 八 struct 九 union 十 enum 十一 typedef 十二 const 十三 unsigned 十四 signed
  • linux top命令VIRT,RES,SHR,DATA的含义

    VIRT virtual memory usage 虚拟内存1 进程 需要的 虚拟内存大小 包括进程使用的库 代码 数据等2 假如进程申请100m的内存 但实际只使用了10m 那么它会增长100m 而不是实际的使用量 RES residen
  • 165.比较版本号

    165 比较版本号 给你两个版本号 version1 和 version2 请你比较它们 版本号由一个或多个修订号组成 各修订号由一个 连接 每个修订号由 多位数字 组成 可能包含 前导零 每个版本号至少包含一个字符 修订号从左到右编号 下
  • AOD相关机制

    AOD的概念 AOD 即A lways O n D isplay 是android一种低功耗的显示模式的一种应用 他能保证屏幕某块区域一直亮 该应用开启时绘制的频率会低于正常的频率 由于AOD现实的不是和正常的亮屏之后显示的一样 只 会显示
  • LuCI 支持多语言,并设置简体中文为默认语言

    安装LuCI语言包 LuCI gt Modules gt Translations gt English en Chinese zh cn Taiwanese zh tw 修改源配置文件 feeds luci modules luci ba
  • RocksDB之Column Families(列族)与 LSM Tree

    1 Column Families 列族 Column Families 是rocksdb3 0提出的一个机制 用于对同一个数据库的记录 键值对 进行逻辑划分 默认情况下所有的记录都会存储在一个默认列族里 ROCKSDB NAMESPACE
  • STM 8 学习笔记 6:GPIO

    1 概述 GPIO 是通用输入输出端口的简称 CPU 通过 GPIO 与外部设备连接起来 从而实现与外部通讯 控制以及数据采集的功能 GPIO 功能框图如下所示 2 相关寄存器 Px ODR 端口数据输出寄存器 配置输出到引脚的高低电平 P
  • 有关easyDL的浅析(资料集合)

    在EasyDL的服务端 有下面几种核心技术 AI Workflow分布式引擎 百度自创PaddlePaddle深度学习框架 迁移学习 Auto Model Search机制 early stoopping机制 模型效果评估机制 下面来一一了
  • vue--配置 请求/响应拦截器

    配置响应拦截器 在案例中后端传输给我的数据包括 响应码 code 响应信息 message 对象 由于我们前端在发送一个请求时 服务端的响应也许会各不相同 我们前端所做出的处理也会不一样 可是如果在每个事件里都单独将对于这些不同响应的处理都
  • elasticsearch基本入门学习笔记

    Elasticsearch学习笔记 一 ElasticSearch概述 历史 谁在使用 ES和Solr 二 ElasticSearch安装 1 安装 2 熟悉目录 3 启动 三 elasticsearch head 可视化界面 四 kiba
  • 深度学习基础--finetune

    finetune 就是用别人训练好的模型 加上我们自己的数据 来训练新的模型 finetune相当于使用别人的模型的前几层 来提取浅层特征 然后在最后再落入我们自己的分类中 finetune的好处在于不用完全重新训练模型 从而提高效率 因为
  • leetcode:1812. 判断国际象棋棋盘中一个格子的颜色(python3解法)

    难度 简单 给你一个坐标 coordinates 它是一个字符串 表示国际象棋棋盘中一个格子的坐标 下图是国际象棋棋盘示意图 如果所给格子的颜色是白色 请你返回 true 如果是黑色 请返回 false 给定坐标一定代表国际象棋棋盘上一个存
  • 你知道 1 + 1 等于几吗?

    阅读本文需要 4 分钟 前言 当有人问你1 1等于几的时候 你会觉着这是对你的一种侮辱 这种弱智问题 居然拿来问我 听起来好像你说的没错 1 1是挺简单的 可是如果让你证明的话 可能你这一辈子都证明不出来 稍微知道一点的人 可能会联想到我国
  • 蓝桥杯习题-砝码称重(动态规划)Python实现

    问题描述 你有一架天平和 N 个砝码 这 N 个砝码重量依次是 W1 W2 WN 请你计算一共可以称出多少种不同的重量 注意砝码可以放在天平两边 输入的第一行包含一个整数 N 第二行包含 N 个整数 W1 W2 W3 WN输出一个整数代表答
  • Android实现倒计时跳转和延时操作

    App启动页倒计时3秒跳转到App的首页 这种操作在很多App中都很常见 如果需要做一个延时操作呢 写一个子线程停留3秒然后执行操作 这样的话需要特别的注意的是UI操作必须放在主线程里 那么还需要转化成主线程 NO 使用Handler轻松实
  • 运维的最终目标是什么?

    序言 闲来无事 聊聊运维的终极目标 反正是瞎扯 毕竟么有风 天气还这么寒冷 思维不能灵动 不能起一丝波澜 歌曲不错 偶尔也可以听听 毕竟也是南征北战 风言风语 运维 从来都不能登上大雅之堂 WHY 纵观整个软件的开发周期 需求 设计 编码
  • 模板类重载>>(输入)和<<(输出)运算符

    在模板类中输入运算符 gt gt 和输出运算符 lt lt 的重载 使用友元在类内声明 在类外实现 include
  • C++模板与模板的重载

    include