我想学C++!!!

我想成为一名程序员!但是我的数学、英语只有中学水平!我以前学过VB,对编程稍微有点概念,但是从未接触过C++!听说挺难的!有没有通过自学成才的!如果我用心学,多久可以达到成为一名合格的程序员?我理解能力还算行,也是很能静下心的!我是男的!

  我现在理解的C++

  /*种种原因,很多精力要投入到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接受的参数看成是类型,而是把template看成是一种接受抽象条件的机制,无论其类型如何,只要这种类型满足tempalte所接受的抽象条件就可以作为参数传递进去,这样就代表了一种泛型的思想-----类型不再是根本,抽象条件才是,类型不过是抽象条件的外衣和在C++中的实现方式而已。在结合基于对象和泛型设计这两种抽象设计模式的技术上诞生的工业产品就是---STL。

  err(游客)发表评论于2005-7-2 10:22:30
  我来,以为“不要先学C,再学C++,而要直接学C++。你不是先学古文,再学白话的,对不对?所以相信我,直接来更容易” 这句话不太对呀! BS 大师也是怎么说,但是我以为,如果是做框架师,或是做老师,或是你只是想和客户晕聊UML,那你可以如上面说从C++ 开始学就可以了,但从学习路线和将来想做一个真正的coder来讲(B大师就以这样的coder为荣),你必须学习从 C 开始,尤其你有其他语言的(basic,dephi)或是从javascrip明白编程的小朋友们,原因都是因为做coder和上面的都不同,我后面时间允许可以再详述……我先说说 c 从哪里入门起步: K&R 的那本 C 我觉得太干,可以做为学习框架,你可以从网上下到n多的 C tutorial ,许多更加平和些,简单些,只要你看的懂,能够用,就好。 比如你看到 关于指针数组 不太明白 那到网上去找个相关的 tutorial 看……(本人的多年体会呀!) 而后多做 console 小程序,测试也好,玩也好,总之多多的写或粘贴些个小东东。 你会发现稍微有些功能的东东,都要用到许多通用的库,或是asm 内嵌,这是你需要找老师的时候,没有老师懂吗?他们都忙着用 快速开发工具去赚钱去了吗? 啊,那我荐一本书(上面没有列出)中文名称是 “c 和指针”,之后你可以和那些上了年纪的一起工作了……可以偷他们的师,可以读懂Linux 辕马,可以环境无关写你的梦想……直到有一天,你心中的上帝对你说,咳,小子(女)! 你的代码需要大量的comments,你的代码太多了,你的代码虽然写的很规范,可是每次要增加灵活的新功能,都要加入大量的函数和全局变量,这样下去怎么行? 你对自己说,我要管理我的代码(甚至是偷来的代码)! 那么你可以看“c++ 沉思录”了,看了后你哭了,……犹如醍醐灌顶,一夜之间你打通了你的任督二脉。 这时你可以疯狂的的 翻看 c++ primer, BS 大师的书,看effective , more effective,……看后,你会发现你可以管理你的代码了,并且在一周之后你突然发现,你花160块大洋买的windows programming可以看明白,什么,你一开始就在窗口里写代码了?厉害!(直接学 c++ 的老师们要学懂这本书门都没有呀!)并且你可以用类来管理 这些 windows api (for c) 了,所有的嘈杂都恢复平静,朗朗大地真干净……你说,你没有谈,类的继承,类的组合,啊,那些个东西,首先他们都是用来,你自己管理代码的东西,这里不得不提 超越并升华 了的一个词:接口 英文 叫 interface 这个词在如今主流编程中无处不在。你悟透了这个词,你就掌握了C++的本质,他是 C++江湖的屠龙刨刀,类的继承技术,组合技术,和 constructor,destructor,asignment,rtti....Oh ,shit 都是小菜了, 都是为了你安全高效的管理你接口,coder 都比较懒,怎么样只写一遍,就可以歇,这是你经常要考虑的问题……接口是个好东东呀! 没有谈到那个摸板库? 那个东东,是用来管理你编译时的代码的代码,你不用太关心,会用就可以了,当作你寸数据的容器……他相关操作容器的泛算法拿来用就是了……要做真正的 coder,从C开始吧!

  (二)书的诱惑

  /*种种原因,很多精力要投入到java的学习和使用中去了,想形成一个学习C++的系列文章,没有什么风格,也没有什么时间表,想到哪就去写。这里想说说自己对于世面上的一些C++书籍的评价,我能保证的是下面所谈到的书,我都基本读过至少一遍,并且对于这样一个比较敏感的话题,我将尽量保持一个客观的态度,不过书籍始终没有最好,只有最适合自己的,我将根据自己的喜好给出四种等级:强烈推荐,推荐,一般,不推荐。需要再次强调的是,光看书,或者光编程都不是计算机的全部。*/

  《C++程序设计语言》:如果你只买一本C++书,这本就是你的选择,作者Bjarne就是让你做出这样选择的全部理由,没有人能比他更了解什么样才是真正的使用C++编程了,有人说到这本书语言晦涩,或者对与初学者此书不适合,对此评论我颇不以为然,我看的是中文版,起码在我看来语言描叙非常到位,我喜欢这样的技术描叙风格。全书的核心就是告诉你如何去用正确的观念编写正确的C++的代码。强烈推荐。
  《C++语言设计与演化》:这本书也是我同时拥有中英两版的两本书之一(另外一本是《设计模式》)。如果在得到上面的那本书之后你需要第二本,那么在我看来这就是你的选择,作者同样是Bjarne,他将在这本书中告诉你C++的起源与发展,语言原则与本质,各种特性加入的理由和考量,以及几乎一切关于C++有趣的故事。我阅读过中英两版,都是强烈推荐。
  《C++标准程序库》:在AMAZON上面关于C++书籍评论最为火暴的一本。全书对于标准程序库的介绍可谓深入浅出,而且全书都是从实际运用出发,书中例子简单却非常说明问题,加上一些图表的陈列,使其概念十分清晰,而且从手册和学习两方面看都有其存在价值。强烈推荐。
  《EFFECTIVE C++ 中文版》:无须多说,在任何C++书籍推荐目录中都可以找到这本书的身影,盛名之下必无虚士。主要强调的是运用C++的各种特性的时候所必须注意的地方,以及一些比较通用的设计手段。其短小精悍的语言自然非常适合快节奏的现代风格,个人就十分喜欢Meyer的写作方式。强烈推荐。
  《MORE EFFECTIVE C++ 中文版》:做为上本书的姐妹篇,一样的写作风格,一样的写作目的。只是个人认为和其姐姐相比,存在差距,主要是信息量没有《EFFECTIVE C++ 中文版》那么大,主要说到了一些C++的设计惯用手法。推荐。
  《C++ PRIMER 中文版》:同样是出自大师之手,作者LIPPMAN,作为早期C++编译器的实现者之一,对与C++的了解以及该如何论序都有自己的独到见解。做为C++的百科全书和《C++程序设计语言》有着一样的地位。但是前者更强调的是C++的语法和其语义,而后者则是以如何用C++进行合理设计做为描叙的中心。全书构思十分巧妙,书的一开始就直接进入C++的主题,前面五章都用类设计一个数据结构,让读者完全明白了各种用户定义类型所代表的抽象能力,然后直接进入第六章标准库中的容器类,这样的设计让读者十分清楚的建立容器和类这两个C++中十分重要的概念。这样的设计针对有一定基础的C++读者来说可以说是非常有效果的。但是对于初学者来说,这确实不是一本合适的书籍,因为一上来太多的名词会把刚刚接触C++的人吓着的。推荐。
  《C++沉思录》:非常有特点的一本书,全书假设读者已经通晓C++语言,重点告诉读者C++的概念以及一些C++的设计手段,比如用C++到底为什么会比C或者其他过程语言更好?(书中给出的答案是,因为只有对象才有能力保持一定的状态,而算法没有这样的能力),如何进行抽象数据类型的程序设计,如何理解多态,如何通过代理隐藏继承,如何进行引用技数,为了效率如何进行缓时拷贝,以及模板技术是如何发展演进最后构成成STL库的。阅读感觉和《C++程序设计语言》一样,思想性非常强,读这样的书很累,脑子必须一直思考问题,思考作者里面提出的问题和他提出的解决方式。这本书最大的特点是非常直接的把C++语言的核心暴露出来-----三种抽象模型和极其语言设施本身对这三种抽象模型的支持。而《C++沉思录》给我的更深层思考是什么才是运用C++最合理的方式。推荐。
  《C++ STL中文版》:很朴实,不花俏,但是价值很高。个人认为其主要价值体现在以下几个方面:1,对于STL的实现关键iterator一般都使用了两种方式描叙,一种比较老式的函数方法,一种是新的?traits技巧,这样读者可以非常清楚的知道技术的演进。2,提供了一个STL LITE版本,阅读这样的代码对自己的提高非常大。3,书中提供的测试模块对于读者来说也是非常有的一章,对于想扩展STL的,可以按照上面提供的方法测试自己的STL组件。缺点:装订比较粗糙,与大师之作的地位不相称。推荐
  《C++ PRIMER PLUS 中文版》:一本思想性不是很强,技巧性不是很强的书,但是对于初学者来说非常合适的书。其中许多论序方式都和具体化,总体来说,这本书是我看过的C++书籍里面最合适初学者的。推荐。
  《深度探索C++对象模型》:这也是一本比较特别的书,告诉你编译器是如何安排处理对象的内存空间的,以及一些OO特性是如何实现的。不认为这是一本C++必须读物,算是课后读物应该比较合适吧,因为有时间了解C++的OO实现还不如花点时间搞清楚OO理论的本质概念:type theory。推荐。
  《C++设计新思维——泛型编程与设计模式之应用》:可谓C++中的奇书。这样的一本书,很难让人做出正确的评价与推荐指数(尤其是以我这个实用和人生本就应该享乐为人生观的人来说~:),因为全书所代表的思想前卫到了有点不切实际的地步,模式+泛型—多么高雅的组合。我个人的观点是,只有一部分人需要阅读此书,他们就是所谓的real c++ fans,暂且不提C++本身是否遇到了困难,就其书中所代表的设计思想,对于C++没有一点感情的程序员(感情就是以爱好为基础,而不是以攒钱为前提),我想对于这样的设计技术总会有晕的感觉,而一般程序员多半都不会喜欢这样的感觉~:)。推荐。
  《对象揭秘:Java、Eiffel和C++》:从书名就可以看出这本书不仅仅和C++有关系。可以说全书就是对C++的一次批判吧(书也起源与作者的一篇批判C++的文章)。有时候听听另外一种声音对自己保持清醒的头脑是非常有帮助的,对待一个人,对待一本书以及对待一门程序设计语言都是如此。这本书好象不是很火,大概跟其宣传不是很到位,或者同能同时了解这三门语言并比较关心这些语言深层次的优略的读者比较少有关系吧,在我看来这本书包含了许多对象与类型方面的理论,最为出彩的就是作者抓住Bjarne的“在C++中一个类就是一个类型”这样的“错误”言论狠批的论证过程。看这本书另外一个好处是能教会大家该如何去合理的辩驳自己的对手~:)。推荐。
  《大规模C++程序设计》:书在手上很久了,可一直没有仔细看,这也是评论之前必须说明的。总体看来书中涉及的很多东西都鲜见于其他读本。不管AMAZON上的评论是否是这本书比较过时,起码它介绍的许多对与我来说都是我所不知道不了解的,别人说过时是他的事情。而我,还是推荐。
  《STL和泛型编程》:难得的一本关于泛型编程的理念书籍,同样也是作为手册和学习两用,但是其手册不是使用手册,而是概念手册,对于设计自己的STL组件,这本书有非常好的帮助,虽然网上有篇STL的文档,其中的70%内容和这本书雷同,但此书仍不失可读性。推荐。
  《C++编程思想 第二版》:非常一般的书,是的这就是我对这本很多人奉为名著的评论,至于为什么是这样的评论,或者你不相信我说的是客观话,在你买了之后看完就知道了。一般。
  《Essential C++中文版》:总感觉这本书定位不是很清楚,因为对于初学者来说其开始就涉及了太多的名词,初学者看这本书,几乎就不要指望能很好的入门。而对于进阶者来说,其内容并无新意,对于C++高手来说,这样的小读本,根本就没有阅读的必要,也许是LIPPMAN+JJHOU的盛名吧,但我觉得这次算是有虚士了~:)。一般。
  《STL源码剖析》:侯SIR的大陆两本著作之一,但在我心中其质量好象并不如很多人说的那样好,就同类作品《C++ STL中文版》相比较内容略现单薄,并且三章之后很多东西都给人以堆砌的感觉,而且大部分精彩的材料都出自《STL和泛型编程》一书,给人感觉书中侯SIR自己的东西并不多,但第二章对于内存管理有很好的论叙表现,并且装订精良,尤其是那些图更是侯SIR的拿手好戏,但总体感觉有点华而不实。一般。
  后面列出两本不推荐的,具体原因也就不再分析。
  《高质量程序设计指南--C++/C语言》,《C++编码规范》
  另外两本常见的C++书籍:
  《Exceptional C++中文版》,《More Exceptional C++中文版》我本人并没有阅读过,但其名声不小,而且加之曾经给此书作者Herb Sutter通邮件的经历,那种考虑到时差都不到24个小时的回信率以及在信中耐心的对技术讲解的态度,同样向大家推荐这两本书,因为在我看来Herb Sutter能力无须考虑加上这样待人的态度,其作品理所值得大家阅读。
  是的,上面就是我大半年来看过的C++的书籍,肯定不少人要嘲笑我的个书呆子了~:),其实我确实就是一个书呆子,至于是否需要看这么多书,我个人意见是不需要,不然我还给出推荐等级干什么?选择自己需要的就是最好。引用曾经有人说到的---评书其实就是个“如人饮水,冷暖自知”的事情。真正的书评在哪里?各自的心里。

参考资料:http://www.oldchild.net/jsjsj/language/xxC++.htm

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-29
  C++是在C语言的基础上开发的一种通用编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++14于2014年8月18日公布。其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性!
  C++这个名字是Rick Mascitti于1983年中所建议的,并于1983年12月首次使用。更早以前,尚在研究阶段的发展中语言曾被称为“new C”,之后是“C with Class”。在计算机科学中,C++仍被称为C语言的上层结构。它最后得名于C语言中的“++”操作符(其对变量的值进行递增)。而且在共同的命名约定中,使用“+”以表示增强的程序。Stroustrup说:“这个名字象征着源自于C语言变化的自然演进”。
第2个回答  2008-12-05
可以
首先,你必须有钻研的精神,遇到一个问题就用心去解决,不要遇到问题就退缩,这样你最多只是个入门的人。
其次,不要听身边人说“学c++不好,要学就学java”这样的话只会让你没信心,而且绝对是费话,既然决定要学C++,就认真去学,不要听别人的。
另外,去找一些比较经典的书看,如“C++ primer”,“The C++ programme language”(这本书适合初学者),另外学到后来看一下“effective C++”,有很多经典书的,介绍的这三本就是很不错的~

很多公司需要C++的人才,但一定要学得深,不要只在表面漂着。
我也是学C++的,祝你成功
第3个回答  2020-11-16
我就觉得你有目标是好的,先学试试看吧
第4个回答  2008-12-03
建议从C学起,编程不止是学习编程语言,编程语言你永远学不完的。。。
只有算法和数据结构是永恒的。建议把数学补上去,还要看些数据结构和算法的书。