搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 编程猿来如此 > C++ 泛型编程(一)

C++ 泛型编程(一)

编程猿来如此 2020-08-02





点击上方“蓝字”,发现更多精彩。
本文作为泛型编程相关知识点的第一篇,主要对一些基本概念进行总结。

泛型编程


01
PART
基本概念
①.泛型
就是不使用具体数据类型,而是使用一种通用类型 T 来进行程序设计; T 只是一个占位符,实际在 T 的位置真实的数据类型取决于用户的需求; 占位符的替换由编译器在编译阶段完成。
②.泛型编程
为了避免因数据类型的不同,而被迫重复编写大量相同业务逻辑的代码,因此发展了泛型及泛型编程技术;泛型编程就是独立于任何特定类型的方式编写代码,常用到STL容器、迭代器、和算法都是泛型编程的例子。

02
PART
模版
①.概念:模版是 C++ 泛型编程的基础,一个模版就是一个创建类或者函数的蓝图。
②.实例化:编译器用推断出的模版参数来为我们创建一个特定版本的函数实例,整个过程发生在编译阶段。



03
PART
与面向对象编程比较
①.多态
面向对象编程支持运行期多态,如 virtual 函数的动态绑定发生在运行期;泛型编程支持编译期多态,在编译器根据模版实例出针对不同类型的具体代码。
②.接口
面向对象编程支持显式接口,是由函数名称、参数类型、返回类型构成;泛型编程支持隐式接口,是基于有效的表达式推断出来的。

04
PART
typename

①.声明模版参数

可以使用 class 或者 typename 声明模版参数,二者含义相同,可用互换。

template<class T> class Widget;//使用 classtemplate<typename T> class Widget;//使用 typename

②.声明从属嵌套类型

当声明一个从属嵌套类型时,必须使用 typename 关键字,告诉编译器这是个类型。因为我们可以用域作用符 :: 来访问 static 成员和类型成员,在模版代码中,编译器遇到 T:: x 时,会默认假定访问的成员名字而不是类型。

template<typename C>void Print2Nd(const C& container){ typename C::const_iterator iter(container.begin()) //确认是类型不是名称}







扫码关注

持续获取最新文章
c++学习 算法与数据结构

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《C++ 泛型编程(一)》的版权归原作者「编程猿来如此」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注编程猿来如此微信公众号

编程猿来如此微信公众号:gh_9675233b3fa3

编程猿来如此

手机扫描上方二维码即可关注编程猿来如此微信公众号

编程猿来如此最新文章

精品公众号随机推荐