【c++基础】笔记(八)
来源:互联网 发布:apache bench 编辑:程序博客网 时间:2024/06/03 20:55
1 函数模板
1.1 模板分类 函数模板 、类模板
1.2 template< typename T > 告诉编译器紧跟着下面的函数或类出现T不要报错
1.3 void myswap( T & a ,T &b )
1.4 调用时候 两种方式
1.4.1 自动类型推导,比如推导出T类型才能使用模板,不要出现二义性问题
1.4.2 显示指定类型,myswap<int>( a,b)
1.4.3 模板使用时候必须告诉编译器T的类型,否则无法使用
2 利用函数模板 实现对通用的数据类型的一个选择排序
2.1 排序规则 从大到小
2.2 排序方式 选择排序
2.3 函数模板
2.3.1 mySort
2.3.2 mySwap
2.3.3 myPrint
3 函数模板与普通函数的区别以及调用规则
3.1 区别
3.1.1 普通函数可以进行隐式类型转换
3.1.2 函数模板不可以进行隐式类型转换
3.2 调用规则
3.2.1 如果普通函数和模板函数都可以匹配,优先选择普通函数
3.2.2 可以通过空模板参数列表方式 强制调用函数模板 myPrint<>(a,b);
3.2.3 函数模板也可以发生重载
3.2.4 如果函数模板可以产生更好的匹配,优先函数模板
4 模板实现机制
4.1 模板并不能对任意的数据类型都进行通用化
4.2 通过模板 产生的函数,叫模板函数
4.3 模板会进行二次编译,第一次编译是模板的本身的代码,第二次会对类型替换后的模板函数进行二次的编译
5 模板局限性
5.1 模板而言并不能做万能的通用
5.2 对于特殊的类型,可以做具体化的一个函数版本
5.3 template<> 返回值 函数名<具体的类型>(具体类型 参数… )
5.4 template<> void mySwap<Person>(Person & a, Person &b)
5.5 对于具体化版本,如果出现和普通模板都可以匹配成功,优先选择具体化版本
6 类模板
6.1 template<> 下面紧跟着的是类,那么就是类模板
6.2 类模板和函数模板区别
6.2.1 类模板在创建对象时候 ,必须用指定显示类型方式,不能进行自动类型转换
6.2.2 类模板中的声明里,可以有默认的值
7 类模板中成员函数的创建时机
7.1 类模板中的成员函数并不是一上来就创建好的
7.2 而是在二次编译期间,替换完T的类型后,才去创建
8 类模板作为函数的参数
8.1 指定传入类型
8.2 参数模板化
8.3 整个类模板化
8.4 查看T类型
8.4.1 cout << "T 类型: " << typeid(T).name() << endl;
9 类模板-继承中引发的问题以及解决
9.1 父类如果是模板,子类继承时候要指定出父类中的T类型,否则无法分配内存
9.2 语法 class Son :public Base<T2>
10 类模板的类外实现
10.1 返回值 作用域<模板参数,模板参数2>::实现成员函数(){}
11 类模板的分文件编写问题以及解决
11.1 问题:类模板中的成员函数一开始不会被创建,导致分文件编写时候连接不到函数的实现
11.2 解决:将.cpp和.h都写到同一个文件中,后缀名改为.hpp
12 类模板碰到友元函数
12.1 友元函数类内实现
12.2 friend void showPerson( Person<T1,T2>&p)
12.3 友元函数类外实现
12.4 声明:
12.4.1 friend void showPerson2<>(Person<T1, T2>&p);
12.4.2 template<class T1, class T2>class Person;
12.4.3 template<class T1, class T2>void showPerson2(Person<T1, T2> & p);
13 类模板应用-实现一个通用的数组
13.1 属性
13.1.1 T * pAddress; //指向堆区的指针
13.1.2 int m_capacity 容量
13.1.3 int m_Size; 大小
13.2 有参构造
13.3 拷贝构造
13.4 析构
13.5 重载 []
13.6 尾插
13.7 尾删
- JAVA基础笔记(八)
- 【c++基础】笔记(八)
- C语言笔记(八)
- Objective-C基础学习笔记(八)-内存管理
- 零基础学C语言 笔记八 二维数组
- C语言基础(八)字符串
- JNI基础(八)开辟C进程
- c语言基础(八)结构体
- java基础学习笔记(八) log4j
- 笔记整理(java基础八-----多线程)
- Java基础 笔记(八)-http
- HTML5基础学习笔记(八)
- Java语言基础学习笔记(八)
- python基础学习笔记(八)
- C语言学习笔记(八)--数组
- c++Primer笔记(八,九)
- 《Effective C++》学习笔记(八)
- C语言程序学习(八)笔记
- C# Android BackupSupport 1.3.0(快速备份文件、打开、剪切板操作,手机做宏键盘)
- lesson11 算术运算符与算术表达式
- 【c++基础】笔记(七)
- ztree入门应用(二)
- 腾讯2017暑期实习生编程题
- 【c++基础】笔记(八)
- Centos7 安装配置 VNCserver
- centos 升级mysql 5.1 到5.6(及rpm安装可能启动不了问题)
- 【c++基础】笔记(九)
- ztree入门应用总结
- Centos mysql 创建用户
- 堆和栈的区别
- IIS Windows 集成身份验证弹出输入用户名密码的解决办法
- RxJava使用场景小结