面向对象编程(C++)学习笔记八

函数模版

背景:
在一个double型数组中,查找最大的数;
在一个float型数组中,查找最大的数;
在一个Object[]数组中,查找最大的元素。
算法都是一样的,遍历数组,找出最大值,只是元素的类型不一样而已。如果每一种算法都重载了一个findmax函数,是否有点太笨拙了呢?

  • 模版,template:定义一个算子,自动适应各个类型。
  • 语法:
template<typename T>
T findmax(T arr[], int len){
T val = arr[0];
...
}

算法相同,元素类型不同,用T代替

  • 函数模版的使用
    使用时,用<>来具体指定typename的类型
int main(){
int arr[4]={1,42,87,100};
int result = findmax<int> (arr,4);
return 0;
}

也就是说,在使用时函数名findmax,表示把int类型代入模版。

  • 小结
  1. 使用函数模版的好处,相同的算法就不用重复的写多变了,简化了代码;
  2. 函数模版用语实现通用的算法generic algorithm,有的教程上称为范性算法;
  3. 通常,我们更多的是调用人家写好的函数模版,很少自己去写一个模版。

类模板

背景:
需求:写一个长度可变的数组类Array,用途于存放若干个元素,个数未知;
设计:内部动态申请一个buffer,capacity:表示buffer的大小,size表示buffer中已经存放元素的个数;
接口:Size():得到当前一个有多个元素;Capacity():最大容量;Clear():清空,使size为0,capacity不变;Pushback():附加一个元素;重载操作符[]:返回第几个元素;
问题:如果这个类只适用于存放double型元素,如果要存放char,float,int,以至于任意类型呢?

template <typename T>
class Array{
...
};

使用类模板时,就可以适用于不同元素类型,避免创建多个类型的类。否则,要为每种类型创建一个类。

  • 类模板的使用:
Array<int> a;
Array<double> arr(4); 	//创建array,初始Capacity为4。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值