以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  我现在理解的C++(转载)[cardinal ]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=15397)


--  作者:pennyliang
--  发布时间:3/11/2005 9:35:00 PM

--  我现在理解的C++(转载)[cardinal ]
*种种原因,很多精力要投入到java的学习和使用中去了,想形成一个学习C++的系列文章

,没有什么风格,也没有什么时间表,想到哪就去写。这里把以前自己另外一个ID发表的

一篇文章的一部分作为这个系列的第一篇,算是开头吧。*/

学习C++重在理解其各种语言设施所代表的语义,以及C++所能表示的语义所代表的设计思

想。首先从宏观上入手,你需要明白的是C++是程序设计语言的本质。在此我把C++最重要

的性质写下来:C++是一门静态类型检查,基于C内存模式,支持四种基本程序设计范型的

语言。注意,这里说明了三个本质特性,静态说明了语言的类型检查性质,基于C内存模式

告诉我们在C++中所有与内存有关的操作都需要程序员自己来负责,这样就带来了很多设计

程序时的需要注意的地方,而理解支持的四种基本范型却是理解各种语言设施的基础。然

后记住C++的最大的一点设计哲学,也是其贯穿应用C++的一条本质,我引用《C++ PRIMER

》中文版前言内的一句话表示--“C++的基础是各种设施,它们让用户能够通过定义新的数

据类型来扩展语言本身,这些新类型可以与内置类型一样的使用方式(如何理解这句话是

关键,我的理解是:用户定义类型可以在任何使用内置类型的时候做为其替代,再具体点

说就是用户定义类型可以象内置类型那样可以被声明,其对象可以被初始化,可以相互复

制,可以象内置类型对象那样和很多操作符一起使用,可以被作为参数传递给函数,可以

作为函数的返回值,可以作为容器的操作对象,用户定义类型可以和内置类型一样作为模

板的参数),掌握这些设施(哪些设施?就是让用户定义类型可以和内置类型一样方便使

用的设施,包括什么?构造,拷贝,解构函数,操作副重载.....)的第一步就是理解基本

语言(什么是基本语言?就是C++中better c部分)。

在此,我还想提出一点十分重要的概念:一门语言的最本质的东西就是其类型系统,任何

语言都有自己的独特的类型系统,学习C++就是学习他的类型系统。所以首先需要彻底明白

什么是数据类型这个概念。这样你的思路就清楚了,你有选择,从每一种C++支持的设计范

型入手学习。

结构化设计-----也就是C++中的better c部分,你需要在C的基础上学会函数重载和引用这

两个最重要的语言新特心性。

基于对象----你需要建立C++最强大的概念--类,也就是用户定义类型,这其实就是数据结

构里面接触的抽象数据类型的概念,以及合理构造使用类的一系列语言措施。并始终记住

,在C++进行设计时用类来表示我们需要表示的概念。类也是C++抽象机制里面最核心的概

念。

面向对象----在这里你需要知道继承和多态这样的OO概念,以及句柄类这样常见的设计技

术,这里你需要明白你开始进入了对接口编程的阶段。同时你要学会OO思想,C++的一些设

施只是为了把OO思想在语言所支持的语义中充分的表示出来。但是在这里,同时你需要明

白的C++能表示的语义是受到其当初语言设计原则限制的(什么原则?静态类型检查,不为

不需要的东西付出代价,选择权在程序员手上语言本身不去强迫程序员的做出选择),也

就是说C++所能表示的OO思想可以称为具有C++特色的OO思想了。这样的OO思想和JAVA所代

表的纯OO哪个更好?没有定论,因为他们本身的设计理念就不一样。

泛型设计----这里你需要明白最重要的一点是C++的temlate机制无论其开始建立的初衷是

什么,现在他所代表的真实含义是:编译时类型推导,也就是编译时多态,由此明白了泛

型的核心---把各种类型当作一种抽象条件的具体化,C++有措施可以定义抽象条件吗?没

有,所以这些条件只能定义在我们自己的心中,但我们可以把具体化的类型当作一种抽象

条件实现在template机制中去,从而使tempalte成为比类型推导机制更进一步的东西,那

就是抽象条件的推导。也就是说,我们不再把template接受的参数看成是类型,而是把te

mplate看成是一种接受抽象条件的机制,无论其类型如何,只要这种类型满足tempalte所

接受的抽象条件就可以作为参数传递进去,这样就代表了一种泛型的思想-----类型不再是

根本,抽象条件才是,类型不过是抽象条件的外衣和在C++中的实现方式而已。在结合基于

对象和泛型设计这两种抽象设计模式的技术上诞生的工业产品就是---STL。


--  作者:awt
--  发布时间:3/11/2005 9:56:00 PM

--  
熟练掌握泛型编程,是我的目标。。。。
--  作者:cathy
--  发布时间:3/12/2005 11:17:00 PM

--  
每一种style都不能解决一切问题。我的理想是在企业级的应用中,充分采用面向对象的方法来看待存在的对象和流程。
--  作者:awt
--  发布时间:3/13/2005 11:30:00 AM

--  
楼上很赞,oo的确是应该我们深入理解的

学好oo不是一辈子能搞定的事情,要不断的学习

如果是为了考试啊,考证啊,那就失去意义了


--  作者:mr28
--  发布时间:3/18/2005 9:11:00 AM

--  
看来我还要在oo上继续下功夫呀!
--  作者:mysandy
--  发布时间:3/25/2005 12:47:00 PM

--  
oo是个很好的方法 但是 我现在应用起来就是很不爽  我要好好学习了
--  作者:caixukun
--  发布时间:4/26/2005 9:56:00 AM

--  
好好学习,天天向上
--  作者:handll
--  发布时间:4/30/2005 8:55:00 PM

--  
不错!希望多些此类文章!
--  作者:ulifj
--  发布时间:5/8/2005 8:31:00 AM

--  
没办法,本人才疏学浅,目前还不懂什么是oo
--  作者:jjplion
--  发布时间:6/18/2005 12:38:00 PM

--  
现在写c程序都用oo的思想了,^_^
--  作者:binaryluo
--  发布时间:7/24/2005 2:58:00 PM

--  
对楼上的观点不敢苟同,OO固然比较流行,但是C还是在其他方面处理过程化的时候也好使。
--  作者:guichen
--  发布时间:9/24/2005 11:16:00 AM

--  
恩,都来学习吧!!!~!
--  作者:charles8112
--  发布时间:10/8/2005 2:07:00 PM

--  
xie xie aaaaaaaaaaaa!!!
--  作者:fanqingsong
--  发布时间:10/11/2005 2:24:00 PM

--  
support
--  作者:sdrk
--  发布时间:10/13/2005 12:10:00 AM

--  
object oriented--oo?
有的时候,用楼主的话做面试的挡箭牌似乎不错。。。
--  作者:microsoft
--  发布时间:10/21/2005 9:03:00 PM

--  
UP!
那学习JAVA也需要这样吗?
--  作者:alonewolf
--  发布时间:11/24/2005 6:36:00 PM

--  
这学期学数据结构和java,由于上学期C++学的不好,这学期更是汗颜啊,怕的要命。。。。。。。
--  作者:fengzhiyi1
--  发布时间:3/9/2006 10:24:00 AM

--  
我觉得运用面向对象思想不是一件很容易的事 不是一朝一夕就可以完全用好的
--  作者:sevencat
--  发布时间:3/12/2006 1:12:00 PM

--  
泛型编程少掌握为妙。会用就可以了,那东东真的维护起来很麻烦。
--  作者:虬髯客
--  发布时间:5/15/2006 4:54:00 PM

--  
ding
--  作者:虬髯客
--  发布时间:5/15/2006 5:03:00 PM

--  
好啊
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
113.281ms