一、什么是泛型编程?

  • 泛型就是通用的型式
  • 编写不依赖数据对象型式的代码就是泛型编程

二、为什么需要泛型编程?

  • 函数重载,相似类定义与型式兼容性

例如:设计函数,求两个数据对象的较小值

//未明确规定参数型式,因c/c++的强制式检查特性

//必须为不同型式的参数分别实现

//函数重载的数目巨大

//以上都是难以解决的问题

1.函数重载问题的解决方案有:

  • 使用C的含参宏

缺点:

  • 无型式检查,无法再编译期检查程序错误
  • 宏文本替换时,要注意操作符优先级,错误的宏文本有可能导致问题

结论:

  • 需要一种机制,能够在语法层面解决宏的问题

2.相似类定义问题

动态数组类

  • 定义存储整数的动态数组类
  • 定义存储浮点数的动态数组类
  • 定义存储某类对象的动态数组类
  • 定义存储某类对象指针的动态数组类
  • ....

结论:

  需要一种机制,能够在语法层面解决相似类的重复定义问题,降低编程工作量

3.型式兼容性问题

C型式转换:(T)x

  不安全

  内建型式(int ,double)对象转换安全性基本保证

  类对象转换可能导致无法控制的严重后果

C++型式转换:T(x)

  可能需要单参数构造函数和重载的型式转换操作符

  不安全

  如果未实现,转换就不存在

类库架构

  类的继承和多态频繁要求能够通过基类的指针或引用访问派生类的对象

  需要沿着类的继承层次,频繁进行对象的型式转换

存在的问题:

  C/C++已有的型式转换均为静态转换,不能适应指针或引用的多态性

  型式转换必须适应全部型式,并能自如操作;然而很不幸,型式无穷尽,开发人员无法编写完备的型式转换代码

保证型式兼容性的机制

  确保型式转换操作合法有效,并在失败时通知用户

  需要维持对象的运行期型式信息(run-time type information,RTTI)

  转换结果确认:通过转换操作的返回值确认结果,或者在失败时触发特定信号;后者需要使用异常处理机制;

  实现策略:模板与型式参数化

三、怎样进行泛型编程?

  • 泛型编程技术手段:模板与型式参数化

C++学习笔记26:泛型编程概念的更多相关文章

  1. JavaScript:学习笔记(2)——基本概念与数据类型

    JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...

  2. es6学习笔记-class之一概念

    前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...

  3. [原创]java WEB学习笔记26:MVC案例完整实践(part 7)---修改的设计和实现

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  5. OpenFlow Switch学习笔记(一)——基础概念

    OpenFlow Switch v1.4.0规范是在2013年10月14号发布,规范涵盖了OpenFlow Switch各个组件的功能定义.Controller与Switch之间的通信协议Open F ...

  6. ‎Cocos2d-x 学习笔记(26) 从源码学习 DrawCall 的降低方法

    [Cocos2d-x]学习笔记目录 本文链接:https://www.cnblogs.com/deepcho/cocos2dx-drawcall-glcalls 1. 屏幕左下角 我们通常在Cocos ...

  7. (1)《Head First HTML与CSS》学习笔记---HTML基本概念

    前言: 1.     这本书并没有面面俱到,涵盖所有内容,只提供作为初学者真正需要的东西:基本知识和信心.所以这不是唯一的参考书.(我买了一本<HTML5权威指南>作为参考书和这本一起看, ...

  8. 自然语言处理NLP学习笔记一:概念与模型初探

    前言 先来看一些demo,来一些直观的了解. 自然语言处理: 可以做中文分词,词性分析,文本摘要等,为后面的知识图谱做准备. http://xiaosi.trs.cn/demo/rs/demo 知识图 ...

  9. hbase 学习笔记一---基本概念

          说在前面,本文部分内容来源于社区官网经过适度翻译,部分根据经验总结,部分是抄袭网络博文,(不一一列举引用,在此致歉)一并列在一起,本文的目的,希望能总结出一些有用的,应该注意到的东西,基本 ...

随机推荐

  1. ASP.NET MVC为字段设置多语言显示 [转]

    这段时间一直在忙.NET的项目,今天就写一下关于.NET的文章吧,也很长时间没写过.NET的啦  在使用ASP.NET MVC3 的时候,使用元数据模式可以非常方便地设置每个 字段(或者说属性)以减少 ...

  2. jenkins安装配置-白痴教程

    1. Maven安装 下载maven安装包,放置在usr/maven目录下:apache-maven-3.2.5-bin.tar.gz tar zxvf apache-maven-3.2.5-bin. ...

  3. asp.net MVC之 自定义过滤器(Filter) - shuaixf

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration :缓存的时间, 以 ...

  4. Java集合类学习笔记(Map集合)

    Map用于保存具有映射关系的数据,因此Map集合里保存着两组数据,一组用于保存Map的key,一组用于保存key所对应的value. Map的key不允许重复. HashMap和Hashtable都是 ...

  5. LeetCode 5 Longest Palindromic Substring manacher算法,最长回文子序列,string.substr(start,len) 难度:2

    https://leetcode.com/problems/longest-palindromic-substring/ manacher算法相关:http://blog.csdn.net/ywhor ...

  6. string类实现(C++)

    class CMyString { friend std::ostream& operator<<( std::ostream& os, const CMyString&a ...

  7. B树

    /************************************************ *作者:陈新 *时间:2014 6.3 *邮箱:cx2pirate@gmail.com * **** ...

  8. 专家解读:BPM与OA的区别

    演进历程 传统OA 模块化架构,仅能满足管理执行的刚性效率,系统的专业化程度有限. BPM 平台化架构,管理要求精细化程度高,系统更专业化,更注重整合. BPM SAAS 基于云架构,跨组织社交化,系 ...

  9. json处理总结(前端js和后端java)

    前端(js): json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键,下面将介绍两者之间的相互转换. json字符串:var st ...

  10. c/c++程序员必须要掌握开源项目

    作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应 ...