学好C++.docx

上传人:b****8 文档编号:30566422 上传时间:2023-08-16 格式:DOCX 页数:10 大小:23.78KB
下载 相关 举报
学好C++.docx_第1页
第1页 / 共10页
学好C++.docx_第2页
第2页 / 共10页
学好C++.docx_第3页
第3页 / 共10页
学好C++.docx_第4页
第4页 / 共10页
学好C++.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

学好C++.docx

《学好C++.docx》由会员分享,可在线阅读,更多相关《学好C++.docx(10页珍藏版)》请在冰豆网上搜索。

学好C++.docx

学好C++

声明:

此文档是转载的,绝对珍品,看到这文章的你可以下载下来,当自己在学习C++中感到无助,盲目时,可以在看看,这是一篇很好的文章,值得你收藏,值得你拥有,值得作为我们初学者的学习的”灯塔”

感谢 TankyWoo 和 杨溪 抽出宝贵的时间为本文审校。

在正确性、语法语义和用词上,他们为我提出了很多建设性的意见,我也进行了相应修改。

尽管如此,我相信错误还是再所难免,如果你发现了错误,请给本文留言,谢谢。

缘由

有写这篇文章(确切的说是这种类型方式方法的文章)的想法是几个月之前了(2012.08.09),“不敢下手的原因是自己C++资历尚浅,如果言语不当,实在是害人”。

我的这种踌躇也让TankyWoo 批评过多次了,但是我仍旧抱着胆怯的心里,这种文章涉及的面有点广,还有一个很大的原因是我的太多想法过于偏激。

今天我去论坛回答了两个问题:

关于结构体申请内存,c++中输入的问题,像这种类似的问题我在论坛回答过不知道多少遍了,可能每天仍旧有很多人会遇到。

于是我有了一个在博客建一个C++FAQ目录的想法,用来整理、总结一些常见的、不常见的、诡异的C++问题和解决方案(称作“奇淫技巧”或许要好一点)。

恰巧,我对此类问题也甚是关心。

我想写一篇怎样学习C++的文章做为C++FAQ的序是再好不过的了,以前的种种顾虑用文章谨慎的文字来弥补吧。

笔者

简单的介绍一下笔者,目的在于读者在读本文的时候心里有一个定位:

“这是什么样的人写的文章,可不可靠,我应该相信他几分?

”我08年上的大学,大一上学期学校开设了C语言课,下学期学的数据结构,C++是在大一暑假自学的(也就是09年6月份,至今三年有余)。

看过一些书(请看书籍推荐),在校期间用C/C++,C#做过很多小项目,自己也写过一些小软件自娱自乐,缺少公司类型大项目的开发经验。

算是C/C++的忠实粉丝吧。

关于本文

1.读者定位是两类人群:

a.初学者,即将入手C++语言、不知道如何开始;b.已经开始学习C++许久了,却进度缓慢,抓不到精髓,倍感迷茫。

2.本文不会深入到C++语言内部挖掘技术点。

3.如果你自诩C++高手,请绕道;如果你本就是C++高手,开发经验丰富,可以对本文提一些建议。

4.本文将结合我自己的学习经历和经验,谈一谈C++应该如何学习,以及扩展到编程领域的一些想法和看法。

5.文章中提及书籍的时候没有评价。

我的书籍推荐中列举了一些C++书籍,都有我的相关评价,感兴趣的可以看一看。

正文

为什么C/C++?

C++是一门编程语言,请注意它仅仅是一门编程语言。

这句话的意思就是一旦有人在做语言好坏之争的时候,一笑而过即可。

特定的语言只是用来在特定的领域解决特定的问题,仅此而已,尤其是现在众多语言纷飞的年代,这句话的正确性不容置疑。

在编程领域里,每个人都会有他/她的入门语言,各持己见。

我个人认为C语言是一个很不错的选择,语法简单,深度可深可浅,高级语言的鼻祖。

很重要的一点是现今的各种编程语言,或多或少都是C语言的衍生品,或者是衍生品的衍生品。

语言相通,只要C语言学好了,上手其他语言问题不大。

C语言的灵魂在于指针,指针可以帮助你更好的理解内存,理解操作系统的工作机理。

C++就是C的衍生品之一,兼容C语言。

起初的目的是扩展C语言“CwithClasses”,但是后来随着发展,C++标准中加入了:

虚函数(virtualfunction)、运算符重载(operatoroverloading)、多重继承(multipleinheritance)、模板(template)、异常(exception)、RTTI、命名空间(namespace)等。

C++变得强大的同时也变的异常复杂,同时随着新内容的增加,C++离C也就越来越远(思想而非语法)。

C++是一门争议性语言,喜欢研究的人很多,吐槽的(包括一些大神级的人物)的人也很多。

在C/C++的时代(C/C++刚出道的时候),语言的可选性较少,所以C++干了许多事情,现在时代不一样了,正如我前面所谓语言纷飞,针对性语言众多,程序员的选择性也就多了(有很多的优秀的语言可以去学,C#,java,php,python,ruby……),所以C++不再是必须品。

在你开始学习之前,请慎重考虑一下,为什么要学?

如果考虑好了,请继续阅读。

C++新手选择一本好书

如果你发现以“数字”命名的书籍,请扔掉!

(21天学通C++?

如果你发现以“通”字样命名的书籍,请扔掉!

(零起点学通C++?

C++从入门到精通?

如果你发现把“Visual”和“C++”联系起来的C++教程,请扔掉!

(太多了,不举例了)

如果你发现“voidmain”作为实例的书籍,请扔掉!

如果你发现“”作为实例的书籍,请扔掉!

……

有几本书可以供你选择:

《C++PrimerPlus》,《C++Primer》,《C++程序设计语言》

我入门用的是《C++入门经典》,继而读的是《C++Primer》。

其实好书和差书很容易区分,厚度和价位是一个很关键的点,通常薄薄的,又便宜,书名却非常霸气的告诉你如何精通,那你果断扔了,想都不要想。

选择一个好的IDE

请注意我强调的是IDE(集成开发环境),而不是套餐(GCC+VIM/EMACS+GDB+[linux]),对于一个初学者来说,一定要抓住重点。

那个套餐NB么?

NB!

酷么?

太酷了!

学么?

可以学,但不是现在。

现在你需要的输入几行代码,然后运行处结果,如果有小问题,可以方便调试的工具。

gcc,vim/emacs,gdb,linux必须承认,它们很优秀,但是学好很需要时间。

不夸张的说,入手vim/emacsorlinux比入手C++的时间只多不少。

初学者一定要相信这一点,网上太多人吹嘘学C++不应该用IDE,就应该直接文本编辑器+GCC用GDB调试,进而言语鄙视IDE。

我不知道你抱着什么心态,我只想说你入门是那样入门的吗?

当时有没有IDE?

你了解IDE吗?

你公司用什么开发?

IDE调试底层调用的也是调试工具,对调试工具进行封装,使之更为人性化了些。

技术永远不是用来炫酷和装B,是用来解决实际问题的。

因此,不管你用什么语言,什么工具,什么平台,只要能把事情做好就行了。

对于一个入门新手,一个人性化的调试环境是必须的。

当然,作为一个C++程序员的话,GCC/GDB是必须要去了解的,linux也是必须要会的。

IDE我推荐使用 CodeBlocks,C++标准支持的好,开源,跨平台,免费,非常优秀。

MicrosoftVisualStudio20XX也是可以的。

忠告:

同学们,千万不要再用VC++6.0了,对C++标准支持极差,谨记!

我学习一直用的是CodeBlocks10.05今天好像已经是12.11,软件开发用的是:

VS2005,VS2008,VS2010。

个人感觉08没有05和10好用。

保持一颗平静的心

给大家看一篇文章:

“21天教你学会C++”。

“想要21天学会C++,首选需要花8年时间学会C++,然后去学量子物理,生物化学,分子生物学,以及遗传学,制造“返老还童”药剂,把自己传送回学编程的21天”——这是迄今为止我所知道的最容易的《TeachYourselfC++in21Days》,推荐大家去看看原文。

大家再去看一篇文章:

“C++程序员自信心曲线图”,“对于大多数的自称自己熟悉C++的程序员来说,基本上来说他们都是用C++的语法来写C。

保持一颗平静的心是很重要的,切记不要急于求成,切记不要浮躁。

学习C++不是三天两天的事情,文中也说了,用10年时间来学习编程。

你准备好了吗?

有人天真的以为学几天C++就可以写软件了,后来发现学了之后还是什么也干不了,软件需要界面,于是去学MFC,学了MFC后才发现MFC没什么,反而是C++基础太差,反过头来继续学习C++。

那个天真的人就是我,我就是这么过来的。

高端的背后也无非都是一行行基础的代码,只要把基础打好了,高端也就没什么了(这里的高端并不是特指MFC高端,基础也不是特指C++,任何事物我想都是一样的)。

我想告诫大家,打好基础比学高端的技术要有用的多,所以不要急。

还需要什么?

我觉得足够了,一本好书,一个好IDE,一颗平静的心态(当然你要有一台PC机了)。

有三点我需要说明一下,第一,平台的选择,这个无所谓的,C++是跨平台的,学C++标准就好了;第二,去培训机构培训会不会学的快一点?

我对培训只用两个字总结“扯淡”,真是扯淡。

第三,视频学习?

我不推荐。

就好像很多人学MFC,看孙鑫的视频一样。

我们又不是小孩子了,学东西需要手把手吗?

再者说了,手把手教的东西都是死的。

当你手里握着一把锤子的时候,你会发现这个世界全都是钉子。

解决问题的方法有很多种,视频能教给你的只是那么固定的一种或者几种,思维定势是很可怕的事情。

我个人是非常不赞同去花钱培训,或者呆呆的在电脑前面看视频。

学习是一种经历,进而这种经历就变成了你宝贵的经验。

遇到问题,勤于思考分析,查阅资料,逐渐的培养出了自己快速、独立解决问题的一套方法,这才是你的财富,这才能以不变应万变。

对于程序员来说,就是对BUG敏锐的嗅觉。

C++入门(停留在表面)

参考标准:

熟练掌握C++语法结构,了解C++主要模块,技术难点。

大部分书上可以找到的知识点。

学习C++要不要学习C?

作为这样的一篇文章,这个探讨几乎是必须要做的。

我的观点很明确,要学!

因为我先学C语言,后学的C++的,而且学习使用过程中无数次穿插的相互学习。

我的程序中从来没有刻意的区分这是C还是C++,我把握的标准是怎么样方便怎么来。

就好像文件读写我从来都不用C++的文件流,因为我习惯了C语言的fread、fwrite、fopen、fseek、ftell等等。

我是站在语言的语法和库的角度来说“要学”的。

如果你要学面向对象的话,那就没必要学C了,好像也没有学C++的必要了,你可以选择一个纯面向对象的语言去学面向对象岂不更好。

总结,以我的个人经历来说,学C++可以先学习C语言(观点已明确,探讨结束!

)。

要了解哪些东西呢?

总结是两点:

语法和库。

所有的语言几乎都是一样的。

1.语法[基本类型、标准库类型、数组和指针、表达式、语句、函数等]

2.STL[容器,算法]

3.模板与泛型编程

4.类与面向对象

语法熟练的是必须的;熟练使用STL编程,面向对象思想不是一天两天就可以有的,需要不断的历练和实战才能培养出来的;面向对象在C++中的实现方式一定要熟(继承,派生,虚函数等);模板的实参演绎要搞清楚。

如何实现入门?

∙看书。

《C++primer》,《C++标准程序库》,《C++template》

∙多思考,多写小程序。

C++进阶(技术研究)

参考标准:

内部机理,奇淫技巧

1.深入C++内部,探究实现的机理[为什么模板不支持分离编译?

虚函数/多重继承是怎么实现的?

类型转换做了那些事情?

异常处理?

等]

2.STL源码学习[学习别人的设计方法?

为什么STL效率高(为达效率,无所不用其极)?

学习数据结构和算法?

内存池?

RTTI?

等]

3.内存[理解指针运算?

内存对齐?

类的内存布局?

new/delete和malloc/delete的区别?

函数变参的实现?

存储方式?

智能指针?

等]

4.编译器在编译,链接的过程中偷偷的做了那些事情。

[如何分析编译器的提示?

链接错误代表可能出现哪些问题?

等]

5.跟上C++库的潮流,研究新标准。

如何实现进阶?

1.看书。

Effective系列书籍,《STL源码剖析》,《C++标准程序库》,《C++沉思录》,《高质量C/C++编程》,《C++编程思想》,《深度探索C++对象模型》等。

2.写软件,遇到问题之后自己折腾,自己探索。

3.逛社区,回答别人的问题。

4.多看看别人的博客。

5.结交自己的技术圈子。

C++高手(走出C++)

参考标准:

面向对象编程,泛型编程

面相对象和泛型编程是C++的精粹,学好这些方面光靠书本上的知识是不够的,只有大量的实战才能切身体会它们的优势。

很多人自以为自己C++学的很不错了,其实他只是在用C的方式写C++代码而已,这句话不无道理。

如何成为脑残粉?

1.看书。

《C++语言的设计和演化》

2.搜集野史。

好了,总结了这许多,我个人理解的C++学习历程应该是这样的。

但是并不意味你看了我列举的书籍都成为高手了。

一来,我列举的书籍不够全面;再者,我在上文中不断重复的两个字眼是“实战”,书上的东西永远是死的,只有经过不断的实战才能将这些知识融会贯通。

接下来我们漫谈C++学习吧,我喜欢漫谈,上面这种中规中矩方式不是我擅长的(我擅长的是闲扯淡)。

把C++孤立起来的学习过程是缓慢的,只有脑子中有了整个的一个“计算机知识体系”,才能相互促进,进步的才快。

什么是计算机知识体系呢?

1.操作系统。

这算是计算机第一大课。

没有原因,必须要学好。

进程管理?

内存管理?

文件管理?

I/O通信?

2.计算机组成原理。

整数的加减乘除?

浮点数表示法?

补码?

中断与DMA?

3.汇编语言。

不要求能写,但是能看懂代码的反汇编就够了。

4.数据结构和算法。

不做解释。

5.编译原理。

“scanner->parser->semanticanalyzer->sourcecodeoptimizer->codegenerator->targetcodeoptimizer”可有印象?

6.计算机网络。

TCP/IP?

7.C语言

看了这几项,你也许会说:

“卧槽,那个,那个不就是我当年逃过的课嘛?

”,没错,这就是我们当年逃过的课,它确实这般的重要。

不求别的,只要你了解这几大课,我敢说你C++中的大部分关于内存,编译器编译链接的问题已经解决了。

而且不管你是学C++,还是学其他技术,水到渠成,一点就透。

因为这是基础,你把基础打好了,万变不离其宗的。

你现在所会的C++,你自以为学的很不错,可是你给别人2个月或者3个月时间耐心学,一样可以学的和你一样,甚至比你要好。

那么你学的价值在哪儿呢?

我学了好几年的C++别人几个月一样可以学到?

是的,你以为C++有多少东西?

怎么样才能做到别人超不过你呢?

1.学习这些计算机体系大课,你脑中的体系结构已经和你学的C++融合到了一起,你脑中的类是存在内存中的,你的递归是在栈中不断的压栈,而他的只看到的是代码。

这也就是为什么我不赞成你培训机构的原因,培训机构不会教会你这些学科大课的。

他只会告诉你C++的函数是怎样声明的,类要怎样书写,而这些100块钱买一本书,坐着看几天都学会了。

何必花那么多钱去培训。

2.多写代码,多调程序。

培养错误的感知能力。

3.学会挖掘,多思考。

如果你的C++仅仅停留在表面上的,卖弄技术,别人三两个月学的一定比你好。

前几年混迹CSDN,老赵的一句话非常之流行:

“计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……”,确实很有道理。

再看本文的题目吧:

如何学习C++,其实我的重点不想放在C++上,我更想探讨的是如何学习的问题,C++只是一个实例。

现在的互联网是浮躁的,导致现在的学生是浮躁的,都想一步登天。

现在学习环境的肮脏的,是个人都想出来赚几声吆喝,就拿博客园的首页口水战一样,你喷我,我喷你,其实到最后都不知道大家在喷什么,只知道必须站出来喷一下证明自己的存在!

这是多么可悲的一个环境。

有这闲工夫多写几遍技术文章不必什么都强?

新技术层出不穷,眼花缭乱,不知道该什么,有人说好的,必定有人在喷。

作为新手,你当如何选择?

我开始庆幸我当时的无知,无知给了我更少的选择,才有了选择。

作为一个旁观者,我能做的不多,我不敢深入其中,只能站的远远的呐喊。

“我建议大家把那几个学科大课学好,把C语言学好,然后再去选择其他编程语言。

一步一步的来,不要急。

最后给大家几个忠告来结束本文吧:

1.多交流:

不管你的技术多么硬,你都不可能一个人做完所有的事情,你要学会与别人合作,与别人交流。

交流过程中,要注意交流技巧。

学会尊重别人,但要不亢不卑。

2.多动手:

熟能生巧,这是万能之理。

我们干的是技术活,最能证明自己能力的就是干!

不是扯淡!

3.多思考:

不要做编码机器。

4.多总结:

相同的问题不可能只出现一次,尤其是在我们这个行业。

总结是为了你在以后更快的解决类似的问题,提高工作效率。

5.多分享:

分享的更多,你会得到的更多,相信我。

6.多阅读:

多聆听:

不要仅限于技术,你要了解的不只是技术。

同样的问题,听一听别人是怎么想的,怎么思考的,你会得到更多。

7.永远不要做拿来主义:

没有人有义务帮你搞定问题,不要张口就要,给你你很幸运,不给你也不是别人的错。

能说的还有很多,让博客待续……

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1