概述
1.函数模板
1.1 template<typename T> 该语句告诉编译器 T 是万能数据类型,下面紧跟着的函数或者类中出现T类型,不需要报错
1.2 可以用此来实现交换数据功能的函数
1.3 调用模板函数
1.3.1 自动类型推导 ---必须让编译器推导出一致 T 类型才能使用模板
1.3.2 显示指定类型 ---显示告诉编译器 T 的类型如:swap<int>(a,b)
1.4 模板的使用必须要告诉编译器 T 是什么类型的,否则无法正常使用
2.普通函数和模板函数的区别与调用规则
2.1 区别
2.1.1 普通函数可以隐式类型转换
2.1.2 函数模板如果是自动类型推导的使用是不可以发生隐式类型转换的
2.2 调用规则
2.2.1 如果模板函数和普通函数都可以实现调用时,优先调用的是普通函数
2.2.2 函数模板同样可以发生函数重载
2.2.3 可以通过空参数列表语法来强制调用函数模板
2.2.4 如果函数模板可以产生更好的匹配,优先调用的是函数模板
3.模板机制
3.1 编译器并不是把函数模板处理成能够处理任何类型的函数,意思它不是万能的
3.2 函数模板通过具体类型产生不同的函数
3.3 编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译
4.模板的局限性以及利用具体化技术解决
4.1 模板并不是真正通用的代码,对于一些自定义数据类型,模板有时候不能实现想要的效果
4.2 可以通过具体化实现对自定义数据类型的操作
4.3 具体化的原型:template<> void Swap<A>(A &a,A &b)
5.类模板
5.1 语法:template<class Type> 关键字template告诉编译器将要定义一个模板。
5.2 类模板和函数模板的区别
5.2.1 类模板使用的时候不可以用自动类型推导,必须显示制定类型
5.2.2 类模板中的类型可以有默认参数
5.3 泛型编程---体现在模板技术--特点:将类型参数化
6.类模板中成员函数创建时机
6.1 类模板中的成员函数,它并不是一开始就创建出来的而是在运行阶段才被创建出来的
7.类模板作为函数参数
7.1 指定传入类型
7.2 参数模板化
7.3 整个类模板化
7.4 查看T类型名称
7.4.1 调用方式:typeid(T).name()
8.类模板遇到继承问题以及解决
8.1 如果父类A是一个类模板,子类B在继承父类A时,必须指定父类中T的类型,否则无法给父类A中的T分配内存、
8.2 格式如下:class B:public A<T>(T必须指定是int或者其他)
9.类模板类外实现成员函数
9.1 先写template<class T1,class T2>
9.2 调用成员函数格式应为:void B<T1,T2>::showB()
10.类模板的分文件编写问题以及解决
10.1 类模板不建议做分文件编写,因为成员函数创建时机在运行阶段,使用时候必须包含.cpp才可以
10.2 解决方案:将类成员函数的声明和实现全都写到一个文件中,并且将文件的后缀名改为.hpp即可
11.类模板遇见友元函数
11.1 全局函数做友元函数的类内实现
11.2 全局函数做友元函数的类外实现
11.2.1 需要告诉编译器模板函数的声明和其实现
12.类模板案例--数组类封装
12.1 设置属性
12.1.1 设置 T *pAddress
12.1.2 设置 int m_Capacity
12.1.3 设置 int m_Size
12.2 设置行为
12.2.1 添加一个有参构造函数
12.2.2 添加一个拷贝构造函数
12.2.3 添加一个析构函数
12.2.4 重载=运算符:operator=
12.2.5 重载[]运算符
12.2.6 添加一个getSize成员函数
12.2.7 添加一个尾插成员函数
12.2.8 添加一个尾删成员函数
12.2.8 添加一个获取数组大小成员函数
最后
以上就是平淡缘分为你收集整理的C++每日学习笔记DAY8的全部内容,希望文章能够帮你解决C++每日学习笔记DAY8所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复