有关C++范型编程?

HNLGDXYJS 2008-08-30 03:11:36
是不是用到模板就叫范型编程了,接触C++一年了还不懂这个,呵呵...
如果是,那我想学一下的话用专门看一本叫C++范型编程的书呢?还是看STL源码比较好,还是两者都一样?因为图书馆有这两本书,所以来问一下.

谢谢.
...全文
130 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyi19901007 2010-11-16
  • 打赏
  • 举报
回复
~\(≧▽≦)/~
帅得不敢出门 2008-08-30
  • 打赏
  • 举报
回复
mark
HNLGDXYJS 2008-08-30
  • 打赏
  • 举报
回复
谢谢大家,特别谢谢wangdeqie的解释,让我感觉自已突然间懂了很多东西一样.
谢谢...

OenAuth.Core 2008-08-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wangdeqie 的回复:]
作为大二学生,有没有必要去了解重构了呢?还有就是C++多线程,这个是不是跟操作系统相关,我还没学操作系统,不过也打算自学了,学C++多线程要先有操作系统基础吗?
-------------------------------------------------------------------------------------------------
楼主,你才大二,时间还很充裕,不用去学什么重构,C++多线程之类,先把C++语言基础打牢!
[/Quote]


强赞,多线程,重构之类,不在大公司,不做大项目,你基本用不着
tangshuiling 2008-08-30
  • 打赏
  • 举报
回复
最经典的书当属c++标准库,浅显易懂,又不乏深度
wangdeqie 2008-08-30
  • 打赏
  • 举报
回复
作为大二学生,有没有必要去了解重构了呢?还有就是C++多线程,这个是不是跟操作系统相关,我还没学操作系统,不过也打算自学了,学C++多线程要先有操作系统基础吗?
-------------------------------------------------------------------------------------------------
楼主,你才大二,时间还很充裕,不用去学什么重构,C++多线程之类,先把C++语言基础打牢!
OenAuth.Core 2008-08-30
  • 打赏
  • 举报
回复
当然现在的CPU很强大,双核的,三核的还有几核的,可以真正实现吃饭的时候说话,哈哈
wangdeqie 2008-08-30
  • 打赏
  • 举报
回复
什么是重构?

重构就好比用餐后对厨房的清理工作。第一次你没没有清理它,你用餐是会快一点。但是由于没有对盘碟和用餐环境进行清洁,第二天做准备工作的时间就要更长一点。这会再一次使命你放弃清洁工作。的确,如果路过清洁工作,你今天总是能够很很快用完餐,介是脏乱在一天天的积累。最终,你得花费大量的时间去寻找合适的烹饪器具,凿去盘碟上已经干硬 的食物残余,并把它们洗擦干净以使它适合于烹饪。饭是天天要吃的。忽略掉清洁工作并不能真正加快做饭速度。
重构的目的,正像在上面描述的,是为了每天清洁你的代码。我们不想让脏乱累积,我们不想“凿去并小船坞擦掉”随着时间累积的“干硬的”比特,我们想通过 最小的努力就能够对我们的系统进行扩展和修改。要想具有这种能力,最重要的就是要保持代码的清洁。

词源

重构这个术语是从数字与多项式的因式分解类比而来。如,x2 − 1 可以被分解为 (x + 1)(x − 1), 这样揭示了前面的形式不可见的内部结构(如两个根+1和−1)。同样,在软件重构中,在可见结构上的改变通常会揭示原代码中"隐藏"的内部结构。

上面数学的例子展示了"重构"的问题。一个表示式不尽然客观地或者处处比另一个更好。它们每个强调不同的方程式的观点,故其实用便多多少少随着个别不同使用情况,以及各个数学家个性与风格变动。这个问题于软件开发领域亦然;个别程序员可能对某既定算法理想的程序形式实现会有不同的意见。

为了简化测试,重构是分步骤完成的。当重构结束后,任何行为上的变化无疑都是错误并可透过除错该程序的新行为个别修正。

马丁·福勒的著作《重构》是一个经典参考书。虽然重构已经非正式的使用了很多年了,William F. Opdyke 在1993年的博士论文却是第一篇著名的关于的重构的文章,即使所有的理论与机制长久以来就以程序转换系统存在。所有这些资源提供了一种常用重构方法的型录索引──所有重构方法需要描述,包括怎样辨识你需要 (或者不需要) 套用该方法,以及如何套用的问题。


重构方法简单列表

下面是非常不完整的代码重构清单。长一点的清单可以在福勒的重构书找到。因为研究者们继续努力不懈的发明以及实现重构,完整清单可能永远都不存在。

成员变量封装(Encapsulate Field)
方法提取 (Extract Method) - 意思是转换大型方法的部分变成新方法。透过拆分代码成比较小点的区块而促进方法可读性。这也对函式通用。

一般化型别 (Generalize Type)
函数归父 (Pull Up) - 或译函数上移,指的是方法从子类移动到父类。
函数归子 (Push Down) - 或译函数下移,指的是方法从父类移动到子类。
方法更名 (Rename Method) - 对方法变更其名以更好的表达它的用途。





OenAuth.Core 2008-08-30
  • 打赏
  • 举报
回复
还有就是C++多线程,这个是不是跟操作系统相关,我还没学操作系统,不过也打算自学了,学C++多线程要先有操作系统基础吗?

多线程和操作系统没有关系,它是程序设计里的一种方法。如果你只想使用多线程的话,明白它的基本工作原理就行了,没有操作系统基础也可以。不过学了操作系统,你能更深刻地理解它。

多线程表面上就是可以实现几件事一起搞,比如人可以边吃饭边说话。
可实质上它是系统时间片里面间隔执行几件事,让你吃一口饭,说一句话,再吃一口,再说一句,这样下去。表面上看就是两件事一起
HNLGDXYJS 2008-08-30
  • 打赏
  • 举报
回复
谢谢楼上几位,那我再看一下图书馆有没<<泛型编程与STL>>,有的话就先看这本了.
还要一个问题,重构又是怎样一个概念呢?到现在我还不知它是什么东东?
作为大二学生,有没有必要去了解重构了呢?还有就是C++多线程,这个是不是跟操作系统相关,我还没学操作系统,不过也打算自学了,学C++多线程要先有操作系统基础吗?
谢谢.
iBug168 2008-08-30
  • 打赏
  • 举报
回复
mark
richbirdandy 2008-08-30
  • 打赏
  • 举报
回复
第一步看C++templates
然后看STl源码
最后看泛型编程理论
我觉得这样比较好

毕竟理论性的东西需要实践基础

看GOF的设计模式 没实践基础 一脑子浆糊
写的东西多点 就明白了一些
jia_xiaoxin 2008-08-30
  • 打赏
  • 举报
回复
范型编程也就是通用编程技术,它一般都是以模板的方式实现的,但不能是用到模板就是泛型编程。就C++而讲它就是指STL
OenAuth.Core 2008-08-30
  • 打赏
  • 举报
回复
是不是用到模板就叫范型编程了,接触C++一年了还不懂这个,呵呵...
范型编程的英文是啥??generic programming,说白了就是通用编程。我对范型的理解就是:写一个函数或类,不管什么int char string等等等等,它都可以处理。模板只是实现的一种方法,具体还有什么,我也不太清楚。呵呵~~~

最好两个一起看,最好天天对着电脑,把想法弄到工具上运行一下,加深印象和和理解
wangdeqie 2008-08-30
  • 打赏
  • 举报
回复
泛型编程

泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。STL以迭代器 (Iterators)和容器(Containers)为基础,是一种泛型算法(Generic Algorithms)库,容器的存在使这些算法有东西可以操作。STL包含各种泛型算法(algorithms)、泛型指针(iterators)、泛型容器(containers)以及函数对象(function objects)。STL并非只是一些有用组件的集合,它是描述软件组件抽象需求条件的一个正规而有条理的架构。

泛型的第一个好处是编译时的严格类型检查。这是集合框架最重要的特点。此外,泛型消除了绝大多数的类型转换。如果没有泛型,当你使用集合框架时,你不得不进行类型转换。

关于泛型的理解可以总结下面的一句话,它是把数据类型作为一种参数传递进来。
wangdeqie 2008-08-30
  • 打赏
  • 举报
回复
看这个吧《泛型编程与STL》,二者都包括了

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧