| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1984 人关注过本帖
标题:C++语言要点
只看楼主 加入收藏
a402730324
Rank: 5Rank: 5
等 级:贵宾
威 望:18
帖 子:1233
专家分:0
注 册:2005-12-1
收藏
 问题点数:0 回复次数:13 
C++语言要点
最近有些想法,想跟大家分享一下,如下:
所有人都知道知道C++来源于C,所以C++支持结构化编程方式,还有就是人尽皆知的OOP,可是,我想好多人不知道C++支持四种程序设计范型,分别为:结构化程序设计方式,基于对象的程序设计方式,面向对象程序设计方式,通用程序设计方式(也就是我们经常听到的泛型程序设计,经常简称gp——generic programming)。
下面分别详细介绍:
结构化程序设计——我就不用详讲啦,大学来的第一门语言就是C,只是C++提供的是一个类型安全的C,也可以说是一个C的真子集,去除了C中的好多不安全因素,个人认为这样也把C引以称道的灵活性去掉了大部分,这便是大部分C程序员用不惯C++的原因之一。具体说结构化编程就是基于功能的抽象,我们分析一个系统时,首先想的是他能干吗?然后进行功能分解,正好可以用过程去描述,但是这里也带来了另一个问题就是全局数据的滥用,扯远啦,不过这种特性很适合于OS的设计。
基于对象的程序——我想大家都听过这样一个名词:抽象数据类型,也就是数据核对数据的操作的一种抽象,也就是我们常说的类,但是这种类没有继承,仅仅是单独的一个具体类型,我们也可以叫它用户自定义数据类型。这种程序设计方式捷径了全局数据的问题,但是提供的抽象很有限,我们可以自己设计的地方不多,也就是表达能力不强,至于跟结构化程序设计或者OO结合时,才能做好的设计。
面向对象的程序设计——可以说这是一个大家伙,需要大讲特讲的东西。面向对象的里面的类都是可以继承的,这也是面向对象的精髓。我们经常听到的抽象和封装都是它的特性,类本来就是对现实世界的抽象,基于实现世界的模型,我们抽象出一种类层次结构,我们抽象出的类层次结构要能很好的模拟现实世界,虽然不要求他们完全一样,因为我们为了隐藏实现细节,常常要向层次结构中添加界面类(抽象类的一种)。继承是一种很强大的功能,我们可以复用原来的设计,然后逐步添加自己的实现,产生一种新类,既然是复用,很可能导致后面的类的界面庞大,因此这里就要求大家做好抽象和封装,隐藏大量的实现细节,提供足够的见面,不要让所有的都是public,还有就是确保一个类是一个确定的类,别设计一个四不像的类,那样可就是抽象的失败啦。还有就是派生的此次别太深,一般最多三层就好啦,太多的话不好维护,也不容易理解,这就要看设计的功力啦。在这里要提一下多重继承,这个特性在现代的C++设计中已经遭到了很多的诟骂,相信大家都知道啦,尤其让人崩溃的钻石型结构,关于多重继承其实可以用组合来实现,这里又涉及到继承和组合的使用,说实话比较难,要看大家的选择啦,不过这里有一个判断规则,就是A
is B or A has B,is
的话就是继承,has的话就是组合,也就是常说的子对象,还有个小诀窍就是你可以问自己:A可以用两个、三个B吗?如果是的话肯定就是组合啦 。虚函数的功能又多强大,特别是纯虚函数,没人反对吧,看过设计模式的人都知道,几乎每一种模式都是从抽象类派生的,除了外观模式,可以这样讲正是因为抽象类的使用,OOD才到达了这样的高度,看看JAVA的语法,好多人就会明白啦,它的里面又往抽象层次上更进了一步,又提供了一种接口类,可以说抽象类为我们支持可扩展性提供了一种强有力的支持,我们可以抽象出一组公共操作作为界面,然后在需要的时候为他们添加相应的实现,这样可以更好的应变变化,甚至可以隐藏实现,我们甚至可以不用知道某个操作是谁发出的,这样无疑提高了程序的安全性和灵活性,要知道我们一直在为软件能如何应付变化而苦恼呢,希望大家可以好好理解,这确实是一种很强大的机制,在设计中经常中用到。


泛型编程——这个是我的软肋。从头说起吧,当我第一次在C++中看到模板的时候,要知道我又多么的兴奋,我当时心想还有这么好的语法啊,一开始我就把它当作一个技巧,用来代替重载,因为我觉得这样写出来的函数更好看(这样看当时的想法多么的幼稚),也曾用它写过模板类,当时自认为作用不大就不再特别关注啦,知道我第一次看到STL,我的第一感觉是惊讶,然后是震惊,后面是羡慕,心想还可以这样用呀,可是当我看了一些他们的源码之后,那可是真正的大眼对小眼,真正的迷茫,看不懂啊,开始我还以为是自己笨,资质不够,后面才知道那玩意是变态的,据说真正懂泛型编程的大陆也就不超过200人,想想吧,全国有多少C++的使用者,后面我逐渐意识到这是对模板的滥用,远远超过了它的实际效用,后来在网上也看到了别人也有这样的想法,那个人绝对不笨,相反他很厉害,真正的牛人。关于泛型编程的一些术语,我相信好多人都不怎么了解,什么模板元编程、类型化、专门化,当你看到他们写出这样的程序时,你一定会感喟到:还可以这样写呀,我真的看不到模板跟OOD有什么联系,可以他们是基于不同的两种抽象机制,一个是基于是操作的抽象,另一个是基于类型的抽象。STL要看,但是你需要知道怎么使用就是啦,因为他们毕竟是各种常用算法和数据结构的集合,使用的范围确实很广,在编程中使用它们,可以简化编程工作,成为一种强大的工具,但是如果你看不懂他们源码的话,不要郁闷,好多人跟你一样看不懂。我甚至又点反感这种用法。

送一句C++之父的话:学习C++时不要过分关于语法细节和技巧,你需要关注的是基本概念。

还有本人的一句话:希望大家的在学习C++的时候,多思考,有选择的实践。
最好希望在大家学有所成!

[[italic] 本帖最后由 a402730324 于 2007-12-8 00:08 编辑 [/italic]]
搜索更多相关主题的帖子: 语言 要点 
2007-12-08 00:06
eagleboycn
Rank: 1
等 级:新手上路
帖 子:191
专家分:0
注 册:2007-9-26
收藏
得分:0 
看看,虽然一些看不懂
谢谢LZ!

兵法的精要在于韬晦自己
2007-12-08 09:05
heroxianf
Rank: 1
等 级:等待验证会员
帖 子:30
专家分:0
注 册:2007-9-3
收藏
得分:0 
大学生们都没学到……就把游戏玩通了@
想起来好伤心!

成功与否、全在自己的决定……
2007-12-08 09:51
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
谢谢指教了

i like linux...
2007-12-08 10:30
一路同行
Rank: 1
来 自:河北省
等 级:新手上路
帖 子:167
专家分:0
注 册:2006-12-24
收藏
得分:0 
已经看了
谢谢指教了

愿意和大家相互帮助 解决其中的难题 我相信只有共享才能共赢
2007-12-08 10:35
孤魂居士
Rank: 2
来 自:老A(中国地大)
等 级:论坛游民
威 望:4
帖 子:1142
专家分:18
注 册:2007-5-21
收藏
得分:0 
了解了

准备用3年做个高级软件工程师 10年也做不成。准备用10年做成高级软件工程师 3年就成了QQ 群 45771086
欢迎版主...欢迎JAVA爱好者...
一起从深夜 到凌晨...
2007-12-09 12:20
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
得分:0 
受益匪浅,谢谢。
2007-12-09 14:29
csmenglei951
Rank: 1
等 级:新手上路
威 望:1
帖 子:77
专家分:0
注 册:2007-9-30
收藏
得分:0 
受教了...
2007-12-09 14:55
564856590
Rank: 1
来 自:陕西省蒲城县
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-12-9
收藏
得分:0 
谢谢了……
2007-12-10 14:00
mayungang
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-12-10
收藏
得分:0 
楼主是不是看过一本叫C++程序设计语言的书,是机械工业出版社的
我正在看这本书,挺好的
2007-12-10 14:07
快速回复:C++语言要点
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038599 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved