C++:模板
时间:2019-01-18
本文章向大家介绍C++:模板,主要包括C++:模板使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、函数模板
template <typename ***>
该模板声明只适用于当前函数
调用的时候有两种方法:
1.隐式调用
编译器会自动识别
mySwap(a, b);
2.显式调用
mySwap<double>(d1, d2);
函数模板:将算法与数据类型分开,可以专注于算法的实现
二.函数模板与普通函数一起使用时,应该遵循的原则:
1、隐式调用过程中不支持类型自动转换
2、当普通函数和函数模板都可以调用的时候,优先调用普通函数
3、当函数模板可以提供更优选择的时候,优先调用函数模板
4、函数模板支持重载
三.模板的实现机制
模板并不是真的将类型作为参数进行传递
根据调用的时候来创建 相应类型的函数 ==> 模板: 生成函数的样本
模板两次编译:
第一次是对模板本身编译
第二次是在调用对调用语句进行编译
模板函数:由模板生成的函数
四.类模板
函数 —> 函数模板 —> 实现通用算法
类 ----> 类模板 —> 实现各种通用的数据类型
类模板不允许隐式调用
模板对象作为参数传递
1、写普通函数
2、写函数模板
1、派生具体的类
2、派生模板类
五.类模板的使用
运算符重载:友元函数在类的外部不给用
1、在类模板中,友元函数可以在类的内部进行实现,但是友元函数不是类的成员函数,还是类的外部函数
2、函数模板的成员函数在类的外部进行实现
(1)函数模板的成员函数在类的外部进行实现,必须全部写成函数模板
(2)类名和域解析符之间要加 T
(3)在类的内部 定义对象的 类型可加可不加
(4)如果返回值是对象类型,则必须加
类模板的友元函数:
(1)友元函数要在类之前进行声明
(2)类对函数进行友元函数声明的时候,需要在函数名和形参列表之间加
类模板分文件的时候,要包含.cpp文件
写类模板的时候一般将实现文件命名为 ***.hpp 文件,表明是可以被包含的文件。
- JQuery笔记(三) jquery的用途
- Heartbeat使用梳理
- JQuery笔记(二) animate支持的属性
- 腾讯叮当首次系统性展示AI能力 开放日展示实战型解决方案
- Execute 方法(Find 对象)
- 在容器中部署mysql与数据持久化
- silverlight如何在运行时用代码动态控制(或创建)动画
- 小程序深夜连发4大功能!你们要的直播来了!
- 机器学习在现实生活中到底有哪些应用?
- 千锋郑州告诉你未来十年Python市场前景如何
- 读书笔记:基于web的工作流引擎设计
- 地图知识-坐标网
- silverlight/xap如何接收参数?
- Silverlight中多个Xaml("场景"? or "窗口"? )之间的切换/调用/弹出/传参数问题小结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- k8s1.13.0二进制部署-node节点(四)
- k8s1.13.0二进制部署-flannel网络(二)
- k8s1.13.0二进制部署-master节点(三)
- k8s1.13.0二进制部署-ETCD集群(一)
- docker-企业级镜像仓库harbor
- docker-Dockerfile
- kubernetes-身份与权限认证(十四)
- kubernetes-控制器statefulset和Job(十三)
- kubernetes-存储卷(十二)
- kubernetes-配置管理(十一)
- ceph-mimic版
- kubernetes-ingress(十)
- kubernetes-控制器Deployment和DaemonSet(八)
- kubernetes集群网络
- kubernetes-深入理解pod对象(七)