以文本方式查看主题 - 中文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 |