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 

 

 

 

 

  • 39
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只会掉头发的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值