[C++开发 03_1/2 _ 模板(167)]

知识点1:模板

1.1模板的概念

 模板的特点:

  • 模板不可以直接使用,它只是一个框架
  • 模板的通用并不是万能的

1.2函数模板

1.2.1函数模板语法

函数模板的引入:

函数模板的举例:

 总结:

  • 函数模板利用关键字template
  • 使用函数模板有两种方式:1、自动类型推导     2、显示指定类型
  • 模板的目的是为了提高复用性,将类型参数化。
1.2.2函数模板注意事项

如果在调用函数时,不去确定T的类型,没法调用函数,会报错,因为编译也推导不出来是什么类型。调用函数的时候,要说明类型,func<int>();

总结:

  • 使用模板时必须确定出通用数据类型T,并且能够推导出一致的类型
1.2.3函数模板案例

 

1.2.4普通函数与函数模板的区别

隐式类型转换:

        int add(int a,int b);

调用时:传入两个float类型的变量,也可以编译通过,也能运行起来,这个就叫隐式类型转换。

总结:建议使用显示类型的方式,调用函数模板,因为可以自己确定通用类型T。

1.2.5普通函数与和函数模板的调用规则

1.2.6模板的局限性

 

总结:

利用具体化的模板,可以解决自定义类型的通用化

学习模板并不是为了写模板,而是在STL能够运用系统提供的模板

1.3类模板

1.3.1类模板语法

 总结:类模板和函数模板语法相识,在声明模板template后面加类,此类称为类模板

1.3.2类模板与函数模板的区别

 

 ​​​​类模板可以有默认类型参数

将上面的类模板参数改写,其他不变

 

 总结:

  • 类模板使用只能用显示指定类型参数。
  • 类模板中的模板参数列表可以有默认参数。
1.3.3类模板中成员函数创建时机

 总结:

        类模板中的成员函数,并不是一开始就创建的,在调用时才去创建。

1.3.4类模板对象做函数参数

 

 总结:

  • 通过类模板创建的对象,可以有三种方式向函数中进行传参
  • 使用比较广泛的是第一中:指定传入类型
1.3.5类模板与继承

总结:如果父类是类模板,子类需要指定出父类中T的数据类型。

1.3.6类模板成员函数类外实现

总结:
因为在类外实现所以T1和T2函数是不知道是什么的,所以要template<class T1,class T2>;
类模板中函数类外实现要加上类模板参数列表加以和普通类区分。

1.3.7类模板分文件编写

 

总结:类模板分文件编写,因为类模板中的成员函数,并不是一开始就创建的,在调用时才去创建。所以分文件编写时不能连接到一起。所以我们再解决的时候,直接将类模板的声明和实现都写再同一个文件中,区别其他的头文件,我们将该类文件的扩展名改为.hpp。这样当别人看到这个.hpp文件的时候,就知道这是一个类模板,里面既有类的声明,也有类的实现。

1.3.8类模板与友元

总结:建议全局函数做类内实现,用法简单,而且编译器可以直接识别。

1.3.9类模板案例

需求分析:

MyArray.hpp文件

MyArray.cpp文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值