C++学习笔记26:泛型编程概念
一、什么是泛型编程?
- 泛型就是通用的型式
- 编写不依赖数据对象型式的代码就是泛型编程
二、为什么需要泛型编程?
- 函数重载,相似类定义与型式兼容性
例如:设计函数,求两个数据对象的较小值
//未明确规定参数型式,因c/c++的强制式检查特性
//必须为不同型式的参数分别实现
//函数重载的数目巨大
//以上都是难以解决的问题
1.函数重载问题的解决方案有:
- 使用C的含参宏
缺点:
- 无型式检查,无法再编译期检查程序错误
- 宏文本替换时,要注意操作符优先级,错误的宏文本有可能导致问题
结论:
- 需要一种机制,能够在语法层面解决宏的问题
2.相似类定义问题
动态数组类
- 定义存储整数的动态数组类
- 定义存储浮点数的动态数组类
- 定义存储某类对象的动态数组类
- 定义存储某类对象指针的动态数组类
- ....
结论:
需要一种机制,能够在语法层面解决相似类的重复定义问题,降低编程工作量
3.型式兼容性问题
C型式转换:(T)x
不安全
内建型式(int ,double)对象转换安全性基本保证
类对象转换可能导致无法控制的严重后果
C++型式转换:T(x)
可能需要单参数构造函数和重载的型式转换操作符
不安全
如果未实现,转换就不存在
类库架构
类的继承和多态频繁要求能够通过基类的指针或引用访问派生类的对象
需要沿着类的继承层次,频繁进行对象的型式转换
存在的问题:
C/C++已有的型式转换均为静态转换,不能适应指针或引用的多态性
型式转换必须适应全部型式,并能自如操作;然而很不幸,型式无穷尽,开发人员无法编写完备的型式转换代码
保证型式兼容性的机制
确保型式转换操作合法有效,并在失败时通知用户
需要维持对象的运行期型式信息(run-time type information,RTTI)
转换结果确认:通过转换操作的返回值确认结果,或者在失败时触发特定信号;后者需要使用异常处理机制;
实现策略:模板与型式参数化
三、怎样进行泛型编程?
- 泛型编程技术手段:模板与型式参数化
C++学习笔记26:泛型编程概念的更多相关文章
- JavaScript:学习笔记(2)——基本概念与数据类型
JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- [原创]java WEB学习笔记26:MVC案例完整实践(part 7)---修改的设计和实现
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Docker:学习笔记(1)——基础概念
Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...
- OpenFlow Switch学习笔记(一)——基础概念
OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...
- Cocos2d-x 学习笔记(26) 从源码学习 DrawCall 的降低方法
[Cocos2d-x]学习笔记目录 本文链接:https://www.cnblogs.com/deepcho/cocos2dx-drawcall-glcalls 1. 屏幕左下角 我们通常在Cocos ...
- (1)《Head First HTML与CSS》学习笔记---HTML基本概念
前言: 1. 这本书并没有面面俱到,涵盖所有内容,只提供作为初学者真正需要的东西:基本知识和信心.所以这不是唯一的参考书.(我买了一本<HTML5权威指南>作为参考书和这本一起看, ...
- 自然语言处理NLP学习笔记一:概念与模型初探
前言 先来看一些demo,来一些直观的了解. 自然语言处理: 可以做中文分词,词性分析,文本摘要等,为后面的知识图谱做准备. http://xiaosi.trs.cn/demo/rs/demo 知识图 ...
- hbase 学习笔记一---基本概念
说在前面,本文部分内容来源于社区官网经过适度翻译,部分根据经验总结,部分是抄袭网络博文,(不一一列举引用,在此致歉)一并列在一起,本文的目的,希望能总结出一些有用的,应该注意到的东西,基本 ...
随机推荐
- HTML5 和HTML4的区别
1.推出理由和目标 HTml5的出现,对于web来说意义是非常重大的,因为它的意图是想要把目前web 上存在的各种问题一并解决掉. (1)web之间的兼容性很低 (2)文档结构不明确 (3)web应用 ...
- 国内技术管理人员批阅google的“春运交通图”项目(大公司下的高效率)<转载>
在整理一份报告的时候,偶然看到2008年春节期间google推出的“春运交通图”项目建设历程报道,很受启发,随以国内的技术管理人员眼光批阅了这篇文章,同时也是自嘲吧. 以下黑色字体是原报道,红色字体是 ...
- [转载]GlassFish 的安装及设置命令
移步: http://blog.csdn.net/joyous/article/details/8008870
- 自定义带动画的Toast
一.style样式: 1. // 移动和透明渐变结合的动画 <style name="anim_view"> <item name="@ ...
- javascript类继承的一些实验
其实一开始编js没怎么用过对象,一般都用func,func,func···但是用多了,感觉代码一点都不美观,还要这里包一个函数,那里包一个函数,或者一直都是函数调用,不好看,而且一些重用的都要重写的话 ...
- 调整ESX的VMFS磁盘格式的块大小,让单个虚拟磁盘支持更大容量
调整ESX的VMFS磁盘格式的块大小,让单个虚拟磁盘支持更大容量 前因:客户搭建了VMware ESX企业版的测试平台:有一天接到一个需求,是测试数据库的,需要一个300G的磁盘. 解决过程: 1.按 ...
- Web服务及http协议
HTTP:HyperText Transfer Protocol--超文本传输协议 超链接:能够在文档之间跳转的文本 早起的Web:仅仅是能够实现在文档之间跳转的一种协议 http/0.9:仅支持纯文 ...
- 初学3D Touch
引言 With iOS 9, new iPhone models add a third dimension to the user interface. A user can now press y ...
- 在QtCreator 2.1.0 下使用opencv231库加载图片并显示
在.pro中库连接如上图,具体规则正在学习,注意debug下连接*d.lib.release下链接.lib.没有d的. 如果出现imread不可以加载图片,cvloadImage却可以,则是上面说的连 ...
- RoseRT配置高版本的编译器
RoseRT配置高版本的VC++ ,我有VC++2008 Express ,实习时下载滴! 感谢Google,感谢大神地指导!困扰的问题终于解决,豁然开朗,so开始吧! 第一大步:重中之重, 确保nm ...