c++高阶-1-模板

文章目录

  • 模板
    • 一、模板基本语法
    • 二、函数模板
      • 1.基本语法
      • 2.函数模板注意事项
      • 3.普通函数和函数模板区别
      • 4.普通函数和函数模板调用规则
    • 三、类模板
      • 1.基本语法
      • 2.类模板和函数模板的区别
      • 3.类模板中成员函数调用时机
      • 4.类模板对象做函数参数
      • 5.类模板与继承
      • 6.成员函数的类外实现

模板

一、模板基本语法

template <typename T>
  • template – 声明创建模板。
  • typename —表明其后面的符号是一种数据类型,可使用class代替。
  • T —通用的数据类型,名称可以替换,通常用大写字母。

二、函数模板

1.基本语法

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

使用这个模板,有2种调用方法。

//1.自动类型推到
int a = 10;
int b = 20;
swqp(a,b);//2.显示指定数据类型
swap<int>(a,b);

2.函数模板注意事项

  • 自动类推导,必须推导出相同的数据类型,才可以使用。
  • 模板必须确定数据类型T才可以使用。

3.普通函数和函数模板区别

  1. 普通函数调用时可以实现隐式类型转换。
  2. 函数模板使用自动类型推导,不可以实现隐式类型转换。
  3. 函数模板使用显示指定类型,可以实现隐式类型转换。
普通函数函数模板-自动类型推导函数模板-显示指定类型
隐式类型转换×

4.普通函数和函数模板调用规则

  • 如果函数模板和普通函数都可以调用,优先调用普通函数。
  • 可以使用空模板参数列表,调用模板函数。
  • 函数模板可以发生函数重载。
  • 如果函数模板可以产生更好的匹配,优先调用函数模板。
void print(int a,int b)
{cout << "普通函数" << endl;cout << a << endl;cout << b << endl;
}template<typename T>
void print(T a,T b)
{cout << "模板函数" << endl;cout << a << endl;cout << b << endl;
}template<typename T>
void print(T a,T b,T c)
{cout << "模板函数" << endl;cout << a << endl;cout << b << endl;cout << c << endl;
}int main()
{int a = 10;int b = 20;//调用普通函数print(a,b);//调用模板函数print<>(a,b);//函数重载print(a,b,10);return 0;
}

三、类模板

1.基本语法

template <typename T,typename Y>
class Persion
{
public:T name;Y age;
}

2.类模板和函数模板的区别

  • 类模板没有自动类型推导的使用方式。
  • 类模板在模板参数列表中可以有默认参数。

//带有默认参数
template<typename T, typename Y = int>
class Person
{
public:T name;Y age;
}

3.类模板中成员函数调用时机

类模板中的成员函数在调用时才创建。

4.类模板对象做函数参数

template<typename T1, typename T2>
class Person
{
public:T1 name;T2 age;
};
  1. 指定传入的类型(最常用)
void test0(Person<string, int>& p)
{.....
}
  1. 参数模板化
template<typename T1,typename T2>
void test1(Person<T1,T2>& p)
{....
}
  1. 整个类模板化
template<typename T>
void test2(T& p)
{....
}

5.类模板与继承

  • 当子类继承的父类是一个类模板时,子类在声明的时候,要指出父类的类型。
  • 如果不指定,编译器无法给子类分配内存。
  • 如果想灵活指定父类中T的类型,子类也需变为类模板。
template<typename T>
class Base
{T name;
};//指定父类的类型
class Son:public Base<int>
{};//子类变为模板类
template<typename T>
class Son :public Base<T>
{
};

6.成员函数的类外实现

template<typename T1,typename T2>
class Person
{
public:T1 name;T2 age;void show();
};//成员函数类外实现
template<typename T1,typename T2>
void Person<T1,T2>::show()
{....
}

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

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

相关文章

Ansys Zemax|场曲跟畸变图的前世今生

实现 OpticStudio通过在X和Y方向&#xff08;弧矢和子午方向&#xff09;的傍轴光线追踪确定近轴图像平面的Z坐标&#xff0c;并测量该近轴焦平面与系统图像平面的Z坐标之间的距离。 切向数据是沿Z轴从图像平面到近轴图像平面在切向&#xff08;YZ&#xff09;平面测量的距离…

Qt Creator配置以及使用Git

Qt Creator配置以及使用Git 引言一、Qt Creator配置git二、Qt Creator使用git2.1 创建git仓库 or git项目导入Qt2.2 配置远端&#xff0c;拉代码 or 上传代码2.3 查看更改2.4 更多细节可参考官方文档 三、参考的博客以及文档 引言 Qt Creator配置Git之后&#xff0c;可以看作是…

【AIGC】DiffuToon:稳定的视频卡通化技术方案

论文&#xff1a;https://arxiv.org/pdf/2401.16224 github&#xff1a;https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/Diffutoon 网络结构 两个主要分支&#xff1a;主要的卡通化管线和编辑分支 重要技术 使用了fastblend(无需模型的视频帧之间的平滑…

动态规划解决0/1背包问题详解

一、引言 在日常生活中,我们经常面临各种选择和决策。有些决策涉及到资源的有限性和选择的最优性,这就需要我们运用一些算法来帮助我们做出最佳的选择。0/1背包问题就是这样一个经典的优化问题,它要求我们在给定的背包容量和物品集合中,选择出总价值最大的物品组合。本文将…

不同操作系统下的换行符

1. 关键字2. 换行符的比较3. ASCII码4. 修改换行符 4.1. VSCode 5. 参考文档 1. 关键字 CR LF CRLF 换行符 2. 换行符的比较 英文全称英文缩写中文含义转义字符ASCII码值操作系统Carriage ReturnCR回车\r13MacIntosh&#xff08;早期的Mac&#xff09;LinefeedLF换行/新行\…

C++程序演示如何使用类和对象进行简单的面向对象编程。

下面是一个简单的C程序示例&#xff0c;展示了如何使用类和对象进行面向对象编程。这个示例定义了一个名为Person的类&#xff0c;它包含私有成员变量&#xff08;姓名和年龄&#xff09;以及公共成员函数&#xff08;用于设置和获取这些成员变量的值&#xff09;。然后&#x…

【C语言】指针经典例题

题1&#xff1a; #include <stdio.h>int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } //程序的结果是什么&#xff1f; 解答如下&#xff1a; 题2&#xff1a; #include <std…

提取含日期字符串并格式化输出

背景 OCR识别的字符串中&#xff0c;日期类型存在字符串中&#xff0c;需要提取出来&#xff0c;并格式化 环境以及依赖package NStudyPy0.0.12 NStudyPy 工具包 , 一个有用的工具包&#xff0c;可以简化开发流程&#xff0c;详细介绍可以参考 NStudyPy 本教程使用 python 3.10…

Coze终于顶不住了?开始收费了

&#x1f914;各位老铁都知道&#xff0c;之前Coze以免费出圈&#xff0c;香碰碰&#xff0c;字节一个月几个亿补贴用户。现在终于顶不住了&#xff0c;开始收费了&#xff01; 我们来看看具体情况吧&#xff01; &#x1f4b8;收费情况一览 目前国内版本还没有开始收费&#x…

VisActor vs ECharts: 哪个更适合你的数据可视化需求?

VisActor vs ECharts: 哪个更适合你的数据可视化需求&#xff1f; 在当今数据驱动的世界里&#xff0c;选择合适的数据可视化工具是至关重要的。ECharts作为广受欢迎的可视化库&#xff0c;已经在行业内拥有了长久的历史和广泛的用户基础。然而&#xff0c;VisActor作为新兴的…

企业该如何选择工时管理工具?

在数字化时代&#xff0c;企业的管理效率直接关系到其市场竞争力。工时管理作为企业管理的重要一环&#xff0c;不仅关乎员工的工作效率&#xff0c;还直接影响到企业的成本控制和决策质量。那么&#xff0c;面对市场上琳琅满目的工时管理工具&#xff0c;企业应该如何做出明智…

麒麟v10-yum下载命令

1、下载抓包工具 tcpdump下载时只能直接安装&#xff1b;想要cp到其他机器的时候就需要用到其他命令了。 2、yum命令只下载不安装 yum install tcpdump --downloadonly 3、下载完成后&#xff0c;安装包的路径 /var/cache/dnf/ks10-adv-os-0c2e217e51b7a335/packages/tcpdump…

前端基础--Vue3核心语法

vue的核心语法 简单入门 Vue3向下兼容Vue2语法&#xff0c;且Vue3中的模板中可以没有根标签 <template><div class"person"><h2>姓名&#xff1a;{{name}}</h2><h2>年龄&#xff1a;{{age}}</h2><button click"chang…

关于ant design vue 使用Modal无法关闭弹窗的解决思路

文章目录 1: 出现问题的版本2.出现问题&#xff08;1&#xff09;ant design 的问题&#xff08;2&#xff09;poina的提示报错 3.正确版本总结 1: 出现问题的版本 "ant-design-vue": "^3.2.20", "pinia": "^2.1.7", "vue"…

人工智能工具在软件开发中的作用与未来展望

随着生成式人工智能&#xff08;AIGC&#xff09;的迅猛发展&#xff0c;软件开发领域正经历着深刻的变革。从代码生成、错误检测到自动化测试&#xff0c;AI工具正在逐渐成为开发者的重要助手。然而&#xff0c;这也引发了对开发者职业前景和技能需求变化的广泛讨论&#xff1…

好看的风景视频素材在哪下载啊?下载风景视频素材网站分享

随着短视频和自媒体的兴起&#xff0c;美丽的风景视频不仅能让人眼前一亮&#xff0c;更能吸引大量观众。无论是旅游博主分享那些令人心旷神怡的旅行片段&#xff0c;还是视频编辑师寻找背景素材来增强作品的视觉效果&#xff0c;高质量的风景视频素材需求量巨大。以下是几个下…

Radio专业术语笔记

在收音机的 RDS (Radio Data System) 功能中&#xff0c;CT 代表 “Clock Time”。RDS 是一种数字广播标准&#xff0c;用于在调频广播中传输辅助数据&#xff0c;如电台名称、节目类型、交通信息等。CT 功能是其中的一部分&#xff0c;用于同步和显示广播电台发送的当前时间。…

【干货】SaaS企业使用PLG模式实现用户自增长与留存的三大战略

近年来越来越多toB厂商开始采用SaaS模式&#xff0c;消费者的体验需求和购买行为也逐渐转变。根据Forrester研究调查显示&#xff0c;B端购买者现在越来越倾向于进行产品体验和产品调研与评估&#xff0c;而非如传统的方式那样直接与销售人员接触。 因此&#xff0c;SaaS&…

.npy格式图像如何进行深度学习模型训练处理,亲测可行

import torchimport torch.nn as nnimport torch.nn.functional as Fimport numpy as npfrom torch.utils.data import DataLoader, Datasetfrom torchvision import transformsfrom PIL import Imageimport json# 加载训练集和测试集数据train_images np.load(../dataset/tra…