首页 > 编程语言 >C++从淬体到元婴day10之模板

C++从淬体到元婴day10之模板

时间:2024-07-03 22:01:51浏览次数:13  
标签:函数 数据类型 C++ 编译器 day10 淬体 数组 类型 模板

2024/6/30

模板

概念:

在C++中,模板是一种泛型编程的工具,它允许程序员编写与类型无关的代码。

作用:

通过使用模板,你可以编写一种可以处理多种数据类型的函数或类,而无需为每种数据类型编写单独的实现。

分类:

函数模板和类模板

函数模板

建立一个通用函数,其函数返回值类型和形参类型可以不具体定制,用一个虚拟的类型来代表。

语法:

e151700a672145b1bd44740ff26ae12d.png

 函数模板的注意事项:

1、自动类型推导,必须推导出一致的数据类型T才可以使用

e41908fc9abb4276aafd82d1de05c85c.png 

T只有一个,数据类型有两个,T不会影分身,所有报错。那么,我们是不是可以搞多一个T出来就可以解决呢?是的,没错。

 21417dd8b746445c9a3ed61c5a92343a.png

2、模板必须要确定出T的数据类型,才可以使用 

使用函数模板的两种方式:

1、隐式推导方式,即不告诉编译器数据类型是什么,让编译器自行推导出来。

2、显示指定类型,主动告诉编译器数据类型是什么。 

b6f21023dd4649968d9a6f844fc48e11.png

类模板

语法:

和函数模板的语法相差无几

78c54a3bdc8543bbabd54c58d9b73b53.png 

 类模版和函数模板的区别:

1、使用类模板时,必须使用显示指定类型,不能使用隐式类型推导。

776013ebd5804097a46e337e9193cf61.png

 

 2、类模板在模板参数列表中可以有默认参数

e6c77145e1ab4c8a86795c946a99a101.png

 类模板对象作为函数参数:

1、指定传入类型

2a75bdc315a1481ca64d74c62ab4aa36.png

2、参数模板化

55bd36941e474bb2bbd2196223c90e67.png

3、整个类模板化

7bd6e4af84704337a06bca188a64cd23.png

 

类模板与继承的那些事:

 当类模板碰到继承时,需要注意以下几点
1、当子类继承的父类是一个类模板时,子类在声明的时候,要指定出父类中T的类型
2、如果不指定,编译器无法给子类分配内存
3、如果想灵活指定出父类中T的类型,子类也需变为模板

42cd10c44b8c4114b6544b9935220ede.png

类的成员函数类外实现怎么搞:

2aa3618e5a1442218a2b2a0de126b3af.png 

类模板与友元:

1、全局函数类内实现

2、全局函数类外实现

0cad78327f9748ed802ae5097eb2150b.png 

 

 类模板实战之数组类(类似于vector容器)

需求分析:

1、可以对内置数据类型以及自定义数据类型进行存储
2、将数组中的数据存储到堆区
3、构造函数中可以传入数组的容量
4、提供对应的拷贝构造函数以及operator=防止浅拷贝问题
5、提供尾插法和尾删法对数组中的数据进行增加和删除
6、可以通过下标的方式访问数组中的元素
7、可以获取数组中当前元素个数和数组的容量
8、可以使用cout一次性输出数组中的元素

实现:

bd7cf905648f496a876344848df56f02.png

 

测试一:内置数据类型

e78fa4f49acb4efc8616b7d1bd6ca029.png

4b08ddd787e14bad84261a0347b0b5aa.png

测试二:自定义数据类型

 5aa1a76956c24de48ebe0c644fdf2b32.png

af4a0f43a3e0481891698909bca04ce3.png 

 

 

 

 

标签:函数,数据类型,C++,编译器,day10,淬体,数组,类型,模板
From: https://blog.csdn.net/Wumingdegushi/article/details/140081253

相关文章

  • 1.选择排序(C++)
    //算法步骤//1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。//2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。//3.重复第二步,直到所有元素均排序完毕。//以下是代码实现//选择排序#include<iostream>#include<iomanip>using......
  • C++ 彻底搞懂指针(3)
    1.数组指针、二维数组指针、字符串指针1.1定义一个数组指针前面说过,指针变量存放的是地址,它可以存放普通变量的地址,可以存放另一个指针变量的地址,当然也可以存放数组、结构体、函数的地址。如果一个指针指向了数组,就称它为数组指针,比如下面的代码就定义了一个指针p指向......
  • C++修改任务计划程序-电源条件
    介绍应用程序需要进行守护,又不想另外运行一个软件去实时监测应用程序是否退出了,退出就重启。在Windows上可以利用任务计划程序,达到守护进程的作用。创建任务计划在nsis脚本中可以直接使用schtasks命令来创建任务计划,以下是每分钟检测一次的脚本。nsExec::ExecToLog'schtask......
  • 新特性之C++14
    C++14是C++11的一个增量升级版本,虽然没有引入像C++11那样的大量新特性,但它通过对已有特性进行优化和扩展,提高了语言的可用性和性能。本文将详细介绍C++14引入和优化的新特性功能。概述C++14旨在修复C++11的一些缺陷,并提供了一些重要的增强功能,以简化开发者的日......
  • PointCloudLib alpha shapes算法提取平面点云边界 C++版本
    测试效果算法简介AlphaShapes算法是一种用于提取平面点云边界特征的方法,以下是对其原理和步骤的详细解释:1.AlphaShapes算法概述目标:从点云数据中提取曲面边界信息,通过计算点云中点的Alpha形状,获得边界特征。Alpha形状:一个可以描述几何体边界的参数。其计算基于一......
  • 基于C++类与权限初识:银行系统
    功能:银行的账户是一个模板,是一个类,有存款人信息和账户额度,而具体的存款人视为一个对象,一个对象不能私自修改账户额度,需要通过一个操作流程,比如去ATM或者柜台进行操作才能修改到账户额度,所以,存款人信息和账户额度设计成私有权限,通过公有的操作流程,也就是公有函数去操作私有......
  • 聊聊C++20的三向比较运算符 `<=>`
    C++20标准引入了许多新特性,其中之一是三向比较运算符<=>,也被称为太空船运算符。这个新运算符为C++程序员提供了一种全新的比较对象的方式,它能有效简化比较逻辑,避免编写多个比较运算符重载的情况。为什么需要三向比较运算符?在C++20之前,如果要完整地定义一个类型的比较行为......
  • C++课程设计--学生宿舍管理系统
    需求分析        系统主要使用类链表,将链表的知识得到充分的使用;还是用到了函数重载。 类定义    主要包括学生类、宿舍类、报修类以及访客类。由于博主时间问题并没有写到访客类的代码,但是思路是一样的。学生类    数据成员:学生学号、姓名、性......
  • 丝滑解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_
    基础环境:MacOSm1、python=3.9前情提要:在Anaconda终端运行代码的时候,显示报错:importError:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:version`GLIBCXX_3.4.29'notfound1问题分析:根据提示是/usr/lib/x86_64-linux-gnu/路径下的libstdc++.so.6缺少版本GLIBCXX_3.4.29解......
  • C++学习1 “&”符号的用法
    “单纯来源于CHATGPT”一在C++中,&符号具有多重用途,主要包括以下几种情况:1.地址运算符当&用于变量前面时,它作为一种一元运算符,用来获取该变量在内存中的地址。例如:inta=5;int*p=&a;//p存储a的内存地址这里&a表示变量a的地址。2.引用声明在类型声明......