大学里 C++ 课程听不懂,但是想当程序员看不懂英文文档,还有希望么

推荐到广播
1170840 人聚集在这个小组
(要起飞了)
(你别那样看着我)
第三方登录:1、程序猿最烦两件事,第一件事是别人要他给自己的代码写文档,第二件呢?是别人的程序没有留下文档。
2、程序猿的读书历程:x语言入门—&x语言应用实践—&x语言高阶编程—&x语言的科学与艺术—&编程之美—&编程之道—&编程之禅—&颈椎病康复指南。
3、还没上大学的时候,高三暑假,跑到家那边的图书城想买传说中的C++的书,然后看到一本C#,我一看,嘿,这个++还写得挺艺术的,重叠起来了,于是把C#买了回来……
4、问:程序猿最讨厌康熙的哪个儿子?答:胤禩,因为他是八阿哥(bug)。
5、有一天,程序猿们突然发现他们要涨的工资掉到井里啦!大家都很害怕,连忙一个吊着一个,从树上伸到井里去捞工资。正好他们摸到工资的时候,一个老程序员忽然兴奋的大叫:别蠢了,要涨的工资还好好的挂在天上呢!
6、诸葛亮是一个优秀的程序猿,每一个锦囊都是应对不同的case而编写的!但是优秀的程序猿也敌不过更优秀的bug!六出祈山,七进中原,鞠躬尽瘁,死而后已的诸葛亮只因为有一个错误的case-马谡,整个结构就被break了!
7、生活中程序猿的真实写照、一款游戏一包烟,一台电脑一下午。一盒泡面一壶水,一顿能管一整天。
8、程序猿要了3个孩子,分别取名叫Ctrl、Alt和Delete,如果他们不听话,程序猿就只要同时敲他们一下就会好的。
9、宪法顶个球!中国的法律都是.txt文件,不是.exe文件。
10、同事说,他在写i++的时候总觉的自己写的是我艹。
11、程序员,年二十有二,始从文,连考而不中。遂习武,练武场上发一矢,中鼓吏,逐之出。改学IT,自撰一函数,用之,堆栈溢出。
12、《桃花庵–程序员版》写字楼里写字间,写字间中程序员;程序人员写程序,又将程序换酒钱;酒醒只在屏前坐,酒醉还来屏下眠;酒醉酒醒日复日,屏前屏下年复年;但愿老死电脑间,不愿鞠躬老板前;奔驰宝马贵者趣,公交自行程序员;别人笑我太疯癫,我笑自己命太贱;但见满街漂亮妹,哪个归得程序员。
13、有一天某程序员去买肉,要了一公斤,拿到公平电子秤上一称:“额……怎么少了24克。”
14、检验代码质量的唯一标准=代码review时骂的次数/代码review时间。
15、杀一个程序员不需要用枪,改三次需求就可以了。
16、C++程序员看不起C程序员,C程序员看不起java程序员,java程序员看不起C#程序员,C#程序员看不起美工。周末了,美工带着妹子出去约会了,一群SX程序员还在加班。
17、问:如何生成一个随机的字符串?答:让新手退出VIM。
18、“我给你出个脑筋急转弯,你说达芬奇密码的上面是什么?”“这……太难了吧。不知道。”“笨!达芬奇密码的上面就是达芬奇帐号啊,那达芬奇密码的下面是什么?”“我……这……还是不知道。”“是达芬奇验证码”。
19、随机函数可以帮你实现家庭和谐:Talk(){:topword(1)=“恩!”;word(2)=“好的!”;word(3)=“然后呢?”;word(4)=“有道理”;i=random(4);sayword(i)goto
20、程序员爱情观:爱情就是死循环,一旦执行就陷进去了;爱上一个人,就是内存泄漏–你永远释放不了;真正爱上一个人的时候,那就是常量限定,永远不会改变;女朋友就是私有变量,只有我这个类才能调用;情人就是指针用的时候一定要注意,要不然就带来巨大的灾难。
21、女同学们纷纷表示,这年头不找个程序员老公,还真是连节日低价购物权都没了。
22、Delphi象吉普车,什么路上都能开,却在啥路上也开不好;PB就象卡丁车,只能在固定线路上开,到室外就有些不稳;VC象跑车,你开得起却买不起,而且一旦发生故障,想修都找不到毛病在哪;Java象敞棚车,不管刮风下雨还是艳阳高照,都能照开不误;VB就是摩托车,骑的时间越长,你越痛恨它!
23、上联:MYSQL明月三千里 下联:XHTML.信号他妈烂!
24、程序员的四大理想:南极有套房,澳大利亚有群羊,全世界电脑死光光,孩儿有个娘。
25、有一种崩溃叫密码输入有误;有一种惊慌叫做账号异地登陆;有一种感情叫隐身对其可见;有一种误会叫人机离线;有一种失落叫没有访问权限;有一种感情叫站点访问失败;有一种无奈叫bug无法复现。
26、黑体的锯齿,宋体的沧桑,崩溃的避头尾集。美工永远纠结于网站程序员的粗犷,就像MAC永远不懂PC的忧伤。
27、程序猿追求MM不成,含泪追问:我在你眼里算什么?!MM答曰:真人版的windows优化大师……极客哥们莫伤心,小戴安慰递纸巾。
28、据说有一位软件工程师,一位硬件工程师和一位项目经理同坐车参加研讨会。不幸在从盘山公路下山时坏在半路上了。于是两位工程师和一位经理就如何修车的问题展开了讨论。硬件工程师说:“我可以用随身携带的瑞士军刀把车坏的部分拆下来,找出原因,排除故障。”项目经理说:“根据经营管理学,应该召开会议,根据问题现状写出需求报告,制订计划,编写日程安排,逐步逼近,alpha测试,beta1测试和beta2测试解决问题。”软件工程说:“咱们还是应该把车推回山顶再开下来,看看问题是否重复发生。”
29、【高效的程序员】当世界末日还有5分钟就要到来的时候。程序员:让我们在这最后的时刻作些什么吧!女友:那好,让我们再做最后一次吧!程序员:那剩下的4分50秒做什么啊?
30、【开发时间】项目经理:如果我再给你一个人,那可以什么时候可以完工?程序员:3个月吧!项目经理:那给两个呢?程序员:1个月吧!项目经理:那100个呢?程序员:1年吧!项目经理:那10000个呢?程序员:那我将永远无法完成任务。
31、一个程序员对自己的未来很迷茫,于是去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”上帝说:“我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的”。于是他去问Lippman。Lippman说:“程序员的未来就是驾驭程序员”。这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”。上帝说:“我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的”。于是他去问Gates。Gates说:“程序员的未来就是榨取程序员”。这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”。上帝说:“我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的”。于是他去问侯捷。侯捷说:“程序员的未来就是诱惑程序员”。这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”。上帝摇摇头:“唉,我的孩子,你还是别当程序员了”。
32、面试官:“熟悉哪种语言”。应聘者:“JAVA”。面试官:“知道什么叫类么”。应聘者:“我这人实在,工作努力,不知道什么叫累”。面试官:“知道什么是包?”。应聘者:“我这人实在平常不带包也不用公司准备了”。面试官:“知道什么是接口吗?”。应聘者:“我这个人工作认真。从来不找借口偷懒”。面试官:“知道什么是继承么”。应聘者:“我是孤儿没什么可以继承的”。面试官:“知道什么叫对象么?”。应聘者:“知道,不过我工作努力,上进心强,暂时还没有打算找对象。”。面试官:“知道多态么?”。应聘者:“知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系?”
33、IT工程师=加班狂+程序员+测试工程师+实施工程师+网络工程师+电工+装卸工+搬运工+超人,有同感的转走。
34、用一句话总结了HTML、CSS、JS的关系:HTML是名词,JS是动词,CSS是形容词和副词。
35、我是个程序猿,一天我坐在路边一边喝水一边苦苦检查bug。这时一个乞丐在我边上坐下了,开始要饭,我觉得可怜,就给了他1块钱,然后接着调试程序。他可能生意不好,就无聊的看看我在干什么,然后过了一会,他幽幽的说,这里少了个分号。分号。。分号。。。
36、女友对程序员说:“紫禁城占得地方好大呀!”程序员:“杀死那个子进程……”
37、从前有个全国管理系统,是孙中山做的设计,老蒋做的实现,结果老毛写了个病毒,趁着日本黑客对系统做攻击的当口,拿到了管理员权限,把原来那批程序员给隔离了。老邓接手以后,重构代码,出了个2.0版,为了开发速度,遗留了一堆BUG没处理。人们纷纷质疑:是不是核心构架太单一,双核会不会好点?
38、一程序员家的水管坏了,他打电话叫来一个水管工修理。水管工鼓捣了一个小时,终于把管子修好了,他递给程序员一张600元的帐单。“600元!”程序员愤怒地说:“我当程序员一天都赚不了这么多钱!”“是啊。”水管工平静地说,“我当程序员的时候也是。”
39、十年前,女:“对不起,我不会喜欢你的,你不要再坚持了,就好比让Linux和Windows
同时运行在一台PC机上,可能吗?”男生听后默默走开,十年后,在一次虚拟技术大会上,我听到一名虚拟技术开发程序员给我讲述了这个故事。
40、程序猿问程序媛:“为什么要离开我,我做得还不够好吗?”媛说:“别傻了,我们根本就是两个世界里的人,就像在JS里永远都无法调用JAVA类一样,我们之间也是不可能的。”猿沉默了很久,转身离开了。一个月之后,他在开源社区公布了dwr的完整代码。
41、【程序员被提bug之后的反应】1.怎么可能;2.在我这是好的,不信你来看看;3.真是奇怪,刚刚还好好的;4.肯定是数据问题;5.你清下缓存试试;6.重启下电脑试试;7.你装的什么版本的类库(jdk)8.这谁写的代码;9.尼玛怎么还在用360安全浏览器;10.用户不会像你这么操作的。
42、敲一夜代码,流两行老泪;用三种语言,唯四肢受罪;待五更鸡鸣,遇骤雨初歇;遂登门而去,伫十里长亭;欲望穿泪眼,无如意郎君;借微薄助力,愿寻得佳偶;成比翼双鸟,乃畅想云端;卷情网之内,做爬虫抓取;为连理桂枝,容数据分析;思千里子规,助框广天地;念茫茫人海,该如何寻觅?
43、早晨一女生抱着一堆书进了阅览室,结果警报响了,大妈让女生看看是哪本书把警报弄响了,那女生把书倒出来,准备一本一本的测。大妈见状急了,把书分成两份,第一份过了一下,响了。又把这一份分成两份接着测,三回就找到了,大妈用鄙视的眼神看着女生,仿佛在说O(n)和O(log2n)都分不清。
44、发现程序员经常熬夜有三个弊端:第一,记忆力越来越差;第二,数数经常会数错;第四,记忆力越来越差。
45、医院回来的程序猿一脸的苦逼样。程序媛:怎么了?程序猿:得了类风湿性关节炎了,我怕会遗传给下一代啊。程序媛:谁说类风湿性关节炎能遗传的?程序猿一脸诧异:类不是继承的吗?
46、知道JAVA程序员和C程序员的差别吗?食堂里,吃完饭就走的是JAVA程序员,吃完饭还要自己收拾的那就是是C程序员。至于为什么会这样,大家都明白(因为JAVA自带垃圾回收机制,C需要手动释放内存)←这就是原因。
47、计算机系的男同学追班里一女同学,结果此女总是躲躲闪闪。男的看没戏,就另找了一个去追,结果这女的不满意了,质问这男的为啥抛弃她。男的问:“请教一个电脑问题,如果你点击一个程序,总是提示‘没有响应’,怎么办?”女的说:“马上结束任务。”男的:“对,我也是这样想的。”
48、一个程序员的吐槽:即要被当做修电脑的,也要被当作做网站的;即要被当作杀毒的,也要被当作盗号的。我要告诉大家,其实我们只是写代码的。
49、如果一个足球界的人“猝死”了,会被怀疑和赌球有关;如果一个官员“猝死”了,会被怀疑和贪腐有关;如果一个农民”猝死”了,会被怀疑和拆迁有关;而如果一个程序员猝死了,那他真的猝死了。
50、老婆是操作系统,一但安装卸载十分麻烦;小秘是桌面,只要你有兴趣可以天天更换;情人是互联网,风光无限花钱不断;小姐是盗版软件,用时记着先杀毒。
51、前台美女三宝:你好,找谁,倒饮料。产品经理三宝:山寨,改版,再推倒。项目经理三宝:进度,流程,做报表。团队经理三宝:团建,开会,评绩效。数据分析师三宝:SQL,Excel,PPT。人事经理三宝:画饼,忽悠,挖墙脚。设计师三宝:修改,重做,飞机稿。程序员三宝:闷骚,加班,修电脑。
52、对于程序员来说、没老婆不悲催。悲催的是、没老婆、控制台还不停的提示你Error:couldnotfindtheobject
53、假如生活欺骗了你,不要悲伤不要心急。《代码大全》会一直陪伴着你……
54、有时候真觉得有些事情如同char*一般,从开始就注定,无法改变。
55、洛阳亲友如相问,就说我在敲代码。
56、”如果你ctrl+alt+del,蹦出任务管理器,你从上到下扫一眼,所有的进程你都认识,知道他们是干什么的,并且知道关掉有什么后果,而且你还能从CPU和内存占用的数字跳动上清楚的知道电脑现在什么状态,那么你应该没有女朋友”………..你妹啊
57、用IE6的吃方便面都没有调料包,你知道不知道……
58、普通青年用IDE(VisualStudio/Eclipse/XCode);文艺青年用VIM、Emacs;二逼青年将IDE设置成VIM模式。
59、程序员换IDE相当于搬家,换主力语言相当于改嫁,换操作系统相当于参加FBI证人保护计划…
60、有两个程序员钓鱼,其中一个钓到一条美人鱼,这个美人鱼上半身是美女,下半身是鱼,于是这个程序员就吧她放了,另一个问他:Why,他回答说:没有API61、阿里小米皆自主,百度排名最公平;京东全网最低价,当当爱国很理性;用户体验看新浪,网易从来少愤青;豆瓣从来不约炮,人人分享高水平;从不抄袭数腾讯,开放安全三六零。
62、编程夜当午,手握小滑鼠。谁知编程辛,行行皆“心”苦;头昏不觉晓,使劲揉眼角。夜夜太辛苦,睡眠知多少。
63、热火朝天的办公室,一精壮青年一边啃着馒头,一边看着眼前产品,愁眉紧锁的他陷入了沉思:产品下一步应该怎么走?如何保证代码质量?如何缩短项目时间?如何控制项目成本?一个个难题需要他思索,抉择。此时,传来项目经理的吆喝:“程旭元,先别敲代码了!给我修下电脑……”
64、原来《人月神话》不是本奇幻小说!原来《代码大全》不是一堆开源代码!原来《鸟哥的Linux私房菜》不是教你做菜!原来《边城》不是教你写代码的!原来《深入浅出HTML》不是教你How to Make Love。
65、文艺程序员写代码追求让别人看懂,普通程序员追求让自己看懂,2B程序员则追求让编译器能看懂;半年后看自己当初写的代码,文艺程序员不知道是自己写的但很容易看懂,普通程序员知道是自己写的但是不太容易看懂,2B程序员埋头看了半天后拍着桌子吼到:“这是哪个SB写的程序!”
66、我真的想让这个世界变得更好,但是他们不给我源代码……
67、【梦醒时分(程序员版)】你说你写了不该写的代码,搞得程序全是bug。你说你定义了不该定义的接口,架构只能重写。你说你走查过了所有代码,找不到正确的地方。你说你感到万分沮丧,甚至开始不打算编程。
68、曾经有很多次机会可以避免bug,将项目按时,保质保量交付给客户,但我没有珍惜,等到世界末日,我才意识到,程序员界最痛苦的事莫过于此。如果玛雅人能给我一次重新选择的机会,让22号的太阳依然升起,我会重新做程序员,用代码改变世界!
69、据一位不愿透露姓名的程序员说,基本上所有客户的所有要求都能总结为下面这样一幅对联,上联:简单易用界面好,下联:稳定高效花钱少,横批:立马就要。
70、某女:你能让论坛的人都吵起来,我今晚就跟你走。某软件工程师:PHP是最好的语言!某论坛炸锅了,各种吵架…。某女:服了你了,我们走吧,你想干啥都行。某软件工程师:今天不行,我一定要说服他们,PHP是最好的语言。
71、“我爱你”三个字,讲出来只要三秒钟,解释要三小时,证明却要一辈子。“bug”三个字母,发现需要三秒,找到需要三小时,debug却要一辈子。
72、生活不仅只是敲代码,还有……调bug。
73、本人擅长Ai、Fw、Br、Ae、Pr、Id、Ps等软件的安装与卸载,精通CSS、JavaScript、PHP、C、C++、C#、Java、Ruby、Perl、Lisp、Python、Objective-C、ActionScript等单词的拼写,熟悉Windows、Linux、MacOS、IOS、Android等系统的开关机,求一份月薪上万的工作!
74、刚在公交车上,一小朋友拿着一本英语书,问她爸爸:xxxxxxfor100years,这里为什么用for呢?她爸说:你看,100years时间很长很长,要循环100次才行,当然用for呀!我听到后,恍然大悟!
78、男朋友写代码不理我,于是我悄悄改掉了web.xml的一个配置,他搞了两天都没调通,我告诉了他,结果他要和我分手,我很伤心,但他的朋友告诉我,他没砍死你才说明他真的爱你…”“楼主别tm编了,程序员哪来的女朋友!”“SB,谁告诉你我是女的了。”
79、产品经理被绑,蒙眼,惊问:“想干什么?”,对方不语,鞭笞之,产品经理求饶:“别打,要钱?”,又一鞭,“十万够不?”,又一鞭,“一百万?”,又一鞭。产品经理崩溃:“你们TMD到底要啥?”“要什么?我帮你做项目,写代码的时候也很想知道你TMD到底想要啥!”
80、某男是程序员,每天半夜三更才回家。某女抱怨:“你就不能提早点回家么?”某男:“好,一定。”于是下次某男一直写代码到天亮提着油条豆浆才回家。
81、有人说,女程序员再淑女,一旦编程就会暴露自己的身份,习惯性的把前额的头发往上捋,露出大大的额头。因为CPU高速运作时需要良好的散热。
82、两个程序员在聊天:“我昨天碰到个辣妹。我把她带回家,马上就开始如饥似渴地亲吻,她就坐在我的键盘上,然后……”
“你家里也有台电脑?啥配置啊?”
83、【如何夸程序员?】通用:你这代码写得真好看。夸C程序员:你这代码不看注释就能懂,写得真好。夸Ruby程序员:我艹,太神奇了,你怎么做到的!夸Perl程序员:这个正则表达式碉堡了。夸Python程序员:Pythonic!夸Java程序员:你写的代码一点都不像Java!
84、昨晚去KTV找小姐。美女:请问先生需要什么类型的?我:学过编程的都给我出来!美女:我就是啊!我:两个小时,把Bug给找出来,我着急要!美女:客官请自重,小女子卖身不卖艺……
85、某程序猿,一直不为女朋友家人所待见。过完年回来,突然宣布说他们准备今年结婚,这让人很是诧异女方家里何以松口了。本着八卦的心态打听之后才知道——程序猿春节前自己搞了个小软件,把女方家的七姑妈、八大姨的春运火车票都给解决了……他真得感谢12306!
86、对于各种凌乱的电脑问题,其他行业的人,以为程序员们什么都会;程序员中的女程序员,以为男程序员什么都会;男程序员中一般程序员,以为技术好的程序员什么都会;技术好的程序员每次都在网上苦苦找答案。
87、程序员跟产品经理一起看电视。每个节目看到一半程序员就换台,看到一半就换台,几次之后产品经理终于忍无可忍的咆哮:老子刚看出点意思你就换、刚看出点意思你就换,到底还让不让人看啦?!程序员淡定的盯着电视道:你半路改需求的时候我可没吱过声!
88、菜鸟:“我该怎么学习WEB编程呢?”大牛:“WEB编程就是一个程序员带着两个MM(MSSQL与MYSQL),玩3P(JSP,PHP,ASP),然后学着How to make love(HTML)..”
89、两程序员向同一个MM求爱,MM说:“去环游世界后再来找我!”码农A立即收拾行李出发。码农B绕MM一圈,然后说:“Hello world!”立即感动了MM。其实他只是习惯在做任何新事情前先确定Hello World能跑通而已。
90、【世界上最没用的几句话】1、警察:不要跑!2、国足:必胜!3、老师:同学们不要睡了!4、病人:医生,您轻点儿!5、父母:孩子,不要闹了!6、罪犯:我是冤枉啊!7、女人:不要嘛!8、男人:我发誓!9、程序员:这个不能实现。
1、程序员:我的第一个问题是,对于我第二个和第三个问题,你可不可以只用‘能’和‘不能’来回答?老板:“OK!”我的第二个问题是,如果我的第三个问题是我能不能涨工资?那么你对于我的第三个问题的答案能不能和第二个问题的答案一样?老板无语了。
92、问:什么比七个工作日更让人不爽?答:第八个(debug)。
93、某程序员说:“Apple是美工写代码,Google是码农做美工。”
94、程序写得好,老板天天找,程序写得好,周末木有了,程序写得好,随时外地跑,程序写的好,找你修电脑。
95、小时候,爸爸常说:“不要老是玩电脑!将来又不会有人付钱给你让你成天坐着玩电脑!”于是,我当了一名程序猿。
96、本名【程旭元】;别名【程序员】;洋名【Programmer】;昵称【程序猿】;外号【码农】;经常性称呼【IT男】;假名【软件工程师】;经济学定义【IT民工】;绰号【修电脑的】。
97、从前,有一个程序猿,他得到了一盏神灯。灯神答应实现他一个愿望。然后他向神灯许愿,希望在有生之年能写一个好项目。后来…后来…他得到了永生。
98、深度优先和广度优先:深度优先就是追一个mm追到底,直到失败然后换个mm继续追;广度优先就是同时追多个mm,一起发展。
99、前端工程师说,我去交友网站找女朋友去了。朋友问,找到了么?工程师说,找到了他们页面的一个bug……
100、我的初恋是C,曾经暗恋过java,迷恋过C++,C#也是过客,现在疯狂追求Python,而Ruby,PHP也渐渐闯入了我的视野……
101、错误原因:找不到程序集“老婆.dll”。重新安装“房子.exe”、“车子.exe”,可能会解决此问题。
102、面试官:“为什么你不做上一份工作了?”WEB程序员:“我开发的网站自从上线后,始终没有出现过问题。”“不错呀,然后呢?”“然后我就被公司辞退了。”
103、一言以蔽之:程序员在国外是hacker(骇客),国内是worker(工人)~社会定位不同,环境、心境都不相同~
104、做男人就要像做产品一样:要么有良好体验,要么有友好界面,要么烧钱改变用户习惯。
105、说到大小写敏感问题,有个程序员朋友以前提到自己女朋友都说mm或MM,后来大家得知mm和MM是两个人……然后一众人都被他鄙视一遍「你们这帮用Windows的」
106、你愿意尊重她,帮助她,关怀她,爱她一生一世吗?”,被问到这个问题的时候,程序员新郎有点慌,因为这个场景太熟悉了,又是需求还没明确好就把排期给定好了。
107、女生都是善良的,对各种小动物毫无抵抗力,例如:路虎、悍马、宝马、捷豹,当然还有天猫,除了程序猿。
108、忽然想到一个问题,波音777的权限这么高真的安全吗?
转载请注明来自36大数据(): &
除非特别注明,本站所有文章均不代表本站观点。报道中出现的商标属于其合法持有人。请遵守理性,宽容,换位思考的原则。& & c++|程序|程序员|问题& & 本文讲述的是C++程序员在学习C#时需要注意的一些问题。& & C++程序员在学习C#时需要注意的一些问题(一)& & 1)使用接口(interface)& & 在c#中,使用关键字interface来定义接口;……
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
论文写作技巧
上一篇:下一篇:
相关经验教程查看:35900|回复:59
【C++概述】
  C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。
  C++发展历史简单介绍
  C语言之所以要起名为“C”,是因为它是主要参考那个时候的一门叫B的语言,它的设计者认为C语言是B语言的进步,所以就起名为C语言;但是B语言并不是因为之前还有个A语言,而是B语言的作者为了纪念他的妻子,他的妻子的第一个字母是B; 当C语言发展到顶峰的时刻,出现了一个版本叫C with Class,那就是C++最早的版本,在C语言中增加class关键字和类,那个时候有很多版本的C都希望在C语言中增加类的概念;后来C标准委员会决定为这个版本的C起个新的名字,那个时候征集了很多种名字,最后采纳了其中一个人的意见,以C语言中的++运算符来体现它是C语言的进步,所以就叫C++,也成立了C++标准委员会;
  美国AT&T贝尔实验室的本贾尼o斯特劳斯特卢普(Bjarne Stroustrup)博士在20世纪80年代初期发明并实现了C++(最初这种语言被称作“C with Classes”)。一开始C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(operator overloading)、多重继承(multiple inheritance)、模板(template)、异常(exception)、RTTI、名字空间(name space)逐渐被加入标准。1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC 。C++是具有国际标准的编程语言,通常称作ANSI/ISO C++。1998年是C++标准委员会成立的第一年,以后每5年视实际需要更新一次标准,下一次标准更新将是在2009年,目前我们一般称该标准C++0x。遗憾的是,由于C++语言过于复杂,以及他经历了长年的演变,直到现在(2009年)只有Visual C++ 2010 CTP开发环境的编译器完全符合这个标准。
  另外,就目前学习C++而言,可以认为他是一门独立的语言;他并不依赖C语言,我们可以完全不学C语言,而直接学习C++。根据《C++编程思想》(Thinking in C++)一书所评述的,C++与C的效率往往相差在正负5%之间。所以有人认为在大多数场合C++ 完全可以取代C语言(然而我们在单片机等需要谨慎利用空间、直接操作硬件的地方还是要使用C语言)。
[编辑本段]
【子语言】
  根据Effective C++第三版第一条款的描述,现在C++由以下四个“子语言”组成:
  1、C子语言。C++支持C语言的几乎全部功能,在语法上与C语言仅有极微妙的差别(如括号表达式的左右值性,具体请参考C++标准文献)。
  2、面向对象的C++。C++首先作为一门面向对象的语言而闻名,这个特点在这里不再详述。
  3、泛型编程语言。C++强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。
  4、STL(C++标准模板库)。随着STL的不断发展,它已经逐渐成为C++程序设计中不可或缺的部分,其效率可能比一般的naive代码低些,但是其安全性与规范性使它大受欢迎。
[编辑本段]
【语言发展】
  C++语言发展大概可以分为三个阶段:第一阶段从80年代到1995年。这一阶段C++语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额;第二阶段从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C++中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C++受到了一定的冲击;第三阶段从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C++出现了发展历史上又一个新的高峰,这些新技术的出现以及和原有技术的融合,使C++已经成为当今主流程序设计语言中最复杂的一员。
[编辑本段]
【C++入门】
  C++是一种语言,仅仅是它的语法、特性、标准类库就已经是一门非常高深的课程,所以在开始学习的时候,必须先要打好基础。在市面上有很多Visual C++的书,虽然其中可能会花1-2章来介绍C++的基本特性,但是那绝对不会让你入门。因此,初学者学习C++应该选择针对C++语言本身的书籍,而不能是针对Visual C++、MFC或者Windows API的。
  学习C++应该由易至难,循序渐进。以前经常有人说学习C++之前应该学习C语言。事实上那不是必须的,C++和C语言虽然有关系,但仍然是两种不同的语言。当然,在学习C++之前学习过其他编程语言是很有好处的。那会使学习C++的速度更快,毕竟很多计算机语言的概念都是相通的。而对于零基础的初学者来说,则是应该静下心来,不要急躁。要成为C++的高手,不是那么容易的,必须要花很大的努力。
  从入门教材的选择上,主要看学习者的自身情况。如果已经有过学习高级语言的经历,那么推荐使用谭浩强的《C++程序设计》。注意是04年版的,06年版的那本书是阉割版,上来就面向对象。虽然说C和C++是相似的,但是前面已经说了,C和C++应该作为两种语言来学习,所以06年的那本内容就稍微欠缺一点了。谭浩强04版的这本书内容比较规整的,条理也很清晰。如果有过其他高级语言的基础,那么估计半年就能对C++的概况有个了解了。谭浩强老师的书已经成为了全国各大高等院校的教科书,是比较受到认可的。
  如果是从零基础开始学C++,那么推荐使用潘嘉杰的《易学C++》。这本书是2008年出的新书,听说是个学生在读书的时候写的。这本书网上有下载免费的电子版。。这本书主要就是针对初学者的,讲得也比较生动有趣,比较提得起学习的兴趣。所以没有基础的初学者选这本书也是不错的,就是想要很快成为高手,可能看这本书还不够。
  至于看完入门的书之后,就应该看一些高层次的书了。比如The C++ Programming Language和C++ Primer,同时也可以向STL、MFC、API等各个方向发展。如果对别的语言感兴趣,还能去看看C#和Java,它们和C++从语法和很多概念上都是类似的。
[编辑本段]
【C++的设计原则】
  o C++设计成静态类型、和C同样高效且可移植的多用途程序设计语言。
  o C++设计成直接的和广泛的支援多种程序设计风格(程序化程序设计、资料抽象化、面向对象程序设计、泛型程序设计)。
  o C++设计成给程序设计者更多的选择,即使可能导致程序设计者选择错误。
  o C++设计成尽可能与C兼容,籍此提供一个从C到C++的平滑过渡。
  o C++避免平台限定或没有普遍用途的特性。
  o C++不使用会带来额外开销的特性。
  o C++设计成无需复杂的程序设计环境。
  出于保证语言的简洁和运行高效等方面的考虑,C++的很多特性都是以库(如STL)或其他的形式提供的,而没有直接添加到语言本身里。关于此类话题,C++之父的《C++语言的设计和演化》 里做了详尽的陈述。
[编辑本段]
【C++的Hello World程序】
  在使用兼容C89标准(也称为ANSI C)的编译器时,下面这个程序显示“Hello, world!”然后结束运行:
  (事实上这并不是符合98标准[ISO C++]的C++程序,而且在多数编译器上这个程序也不能运行,若要在比较旧的编译器上编译该程序,应将iostream改为iostream.h)
  #include &iostream&
  int main()
  printf(&Hello, world!\n&);
  return 0;
  在使用兼容C++98标准(ISO/IEC )的编译器时,下面的程序也是可以的:
  #include &iostream.h&
  int main()
  cout && &Hello, world!& &&
  return 0;
  在使用兼容C++ STL的编译器时,应当是:
  #include &iostream&
  int main()
  cout&&&Hello,world!&&&
  return 0;
  根据ISO C++的规定,main函数的形式只能是
  int main(void)
  int main(int argc,char * argv[])
  尽管如此,但在Visual C++ 2003以前的Microsoft Studio编译器上,
  void main()
  也被支持,但这并不正确,也不标准。这样的写法会使程序代码丧失跨平台的特性。
[编辑本段]
【C++程序员的数量】
  分析机构EvansData定期对开发人员展开调查,其调查结果与Stroustrup提出的C++正在扩张的说法相违背。EvansData的数据显示,以C++为工具的开发人员在整个开发界所占的比例由1998年春天的76%下降至2004年秋的46%。
  Forrester最新的调查显示,C++、微软VisualBasic和Java是众多公司产品体系的首选语言。对100家公司的调查显示,C/C++、VisualBasic和Java在产品体系中的使用比例分别是59%、61%和66%。
  传统上认为,C++相对于目前一些新潮的语言,如Java、C#,优势在于程序的运行性能。这种观念并不完全。如果一个人深信这一点,那么说明他并没有充分了解和理解C++和那个某某语言。同时,持有这种观念的人,通常也是受到了某种误导(罪魁祸首当然就是那些财大气粗的公司)。对于这些公司而言,他们隐藏了C++同某某语言间的核心差别,而把现在多数程序员不太关心的差别,也就是性能,加以强化。因为随着CPU性能的快速提升,性能问题已不为人们所关心。这叫“李代桃僵”。很多涉世不深的程序员,也就相信了他们。于是,大公司们的阴谋也就得逞了。
  一般认为,使用Java或C#的开发成本比C++低。但是,如果你能够充分分析C++和这些语言的差别,会发现这句话的成立是有条件的。这个条件就是:软件规模和复杂度都比较小。如果不超过3万行有效代码(不包括生成器产生的代码),这句话基本上还能成立。否则,随着代码量和复杂度的增加,C++的优势将会越来越明显。造成这种差别的就是C++的软件工程性。在Java和C#大谈软件工程的时候,C++实际上已经悄悄地将软件工程性提升到一个前所未有的高度。这一点被多数人忽视,并且被大公司竭力掩盖。
  语言在软件工程上的好坏,依赖于语言的抽象能力。从面向过程到面向对象,语言的抽象能力有了一个质的飞跃。但在实践中,人们发现面向对象无法解决所有软件工程中的问题。于是,精英们逐步引入、并拓展泛型编程,解决更高层次的软件工程问题。(实际上,面向对象和泛型编程的起源都可以追溯到1967年,但由于泛型编程更抽象,所以应用远远落后于面向对象)。
[编辑本段]
【C++语言的应用】
  哪些程序是用C++写的:
  主流的3种操作系统Windows,Linux,Unix,内核都是用C语言和汇编写的,上层高级特性是用C++写的。
  《魔兽世界》等几乎所有的网络游戏,百度搜索引擎(),我们所用的大多数软件都是用C++写的(硬件也有很多用到C++的)。
  C++之父Bjarne Stroustrup列举的C++应用:
  :Software for large-scale e-commerce
  Apple: OS X is written in a mix of language, but a few important parts are C++. The two most interesting are
  AT&T:The largest US telecommunications provider.
  o provisioning systems
  o systems for rapid network recovery after failure
  Autodesk: A large number of major number of application in the CAD domain
  Ericsson:o server platform.
  o TDMA-CDMA HLR
  o GSM-TDMA-CDMA mobility gateway
  Google: web search engine, etc。
  HP: Here is a tiny fraction of HP's C++ apps:
  o C, C++, Fortran90 compilers, and linker for the new HP IA64 platform (these add to more than 1 million lines of C++ code).
  IBM: o OS/400.
  o K42: a high performance, open source, general-purpose operating system kernel for cache-coherent multiprocessors.
  Intel:o Vtune performace analysis software
  o compilers and optimizers
  o lots of chip design and manufacturing software
  JPL (Jet Propulsion Lab, NASA): Mars rover autonomous driving system (incl. scene analysis and route planning). C++ on Mars! Also lots of supporting software &on the ground& (i.e. Earth).
  Microsoft:o Windows XP
  o Windows NT (NT4 and 2000)
  o Windows 9x (95, 98, Me)
  o Microsoft Office (Word, Excel, Access, PowerPoint, Outlook)
  o Internet Explorer (including Outlook Express)
  o Visual Studio
  Mozilla: Firefox browser and Thunderbird mail client (open source)
  MySQL: MySQL Server (about 250,000 lines of C++) and MySQL Cluster. Arguably the world's most popular open source database
  Nokia: o Mobile Communications radio-station/internet bridges: FlexiGGSN (Gateway GPRS Support Node) and FlexiSGSN (Server GPRS Support Node).
  o MSC/HLR
  Sun: o The HotSpot Java Virtual Machine is written in C++
  Symbian OS: rationale: &[...] using C++ for all system code, from the kernel upwards.& This is one of the most widespread OS's for cellular phones
  KDE from linux is written in C++.
  telephone systems: I think it would be almost easier to list the systems which aren't written in C++
  更详细的应用列表1:
  更详细的工业列表2:
[编辑本段]
【C++编程技巧】
   一、使用new和delete进行动态内存分配和释放
  运算符new和delete是C++新增的运算符,提供了存储的动态分配和释放功能。它的作用相当于C语言的函数malloc()和free(),但是性能更为优越。使用new较之使用malloc()有以下的几个优点:
  (1)new自动计算要分配类型的大小,不使用sizeof运算符,比较省事,可以避免错误。
  (2)自动地返回正确的指针类型,不用进行强制指针类型转换。
  (3)可以用new对分配的对象进行初始化。
  使用例子:
  (1)int* p;
  p=new int[10]; //分配一个含有10个整数的整形数组
  delete[] p; //删除这个数组
  (2)int* p;
  p=new int (100);//动态分配一个整数并初始化
   二、使用inline内联函数替代宏调用
  对于频繁使用的函数,C语言建议使用宏调用代替函数调用以加快代码执行,减少调用开销。但是宏调用有许多的弊端,可能引起不期望的副作用。例如宏:#define abs(a) ((a)&0?(-a):(a)), 当使用abs(i++)时,这个宏就会出错。
  所以在C++中应该使用inline内联函数替代宏调用,这样既可达到宏调用的目的,又避免了宏调用的弊端。
  使用内联函数只须把inline关键字放在函数返回类型的前面。例如:
  inline int Add(int a,int b);//声明Add()为内联函数
  这样编译器在遇到Add()函数时,就不再进行函数调用,而是直接嵌入函数代码以加快程序的执行。
   三、使用函数重载
  在C语言中,两个函数的名称不能相同,否则会导致编译错误。而在C++中,函数名相同而参数数据类型不同的两个函数被解释为重载。例如:
  void PutHz(char* str);//在当前位置输出汉字
  void PutHz(int x,?int y,?char * str);//在x,y处输入数字
  使用函数重载可以帮助程序员处理更多的复杂问题,避免了使用诸如intabs()、fabs()、dabs()等繁杂的函数名称;同时在大型程序中,使函数名易于管理和使用,而不必绞尽脑汁地去处理函数名。同时必须注意,参数数据类型相同,但是函数返回类型不同的两个函数不能重载。
   四、使用引用(reference)代替指针进行参数传递
  在C语言中,如果一个函数需要修改用作参数的变量值的时候 ,参数应该声明为指针类型。例如:
  void Add(int *a)
  (*a)++;
  调用时则使用
  Add(&x); //其中x为int或可以转化为int的类型,如unsigned int, 但这时候编译器通过回给出warning
  对于复杂的程序,使用指针容易出错,程序也难以读懂。在C++中,对于上述情况 可以使用引用来代替指针,使程序更加清晰易懂。引用就是对变量取的一个别名,对引用进行操作,这就相当于对原有变量进行操作。例如使用引用的函数定义为:
  void Add(int& a)
  a++; //a为一个整数的引用
  调用时使用
  Add(x); //其中x为int
  这个函数与使用指针的上一个函数的功能是一样的,然而代码却更为简洁和清晰易懂。
  五、使用缺省参数
  在C++中函数可以使用缺省参数,例如:
  void PutHzxy(char *str,int x=-1, int y=-1)
  if(x==-1)
  x=wherex();
  if(y==-1)
  x=wherex();
  moveto(x,y);
  PutHx(str);
  可以有三种方式调用函数PutHzxy(),例如:
  PutHzxy(&C++语言&);//使用缺省参数?在当前位置输出
  PutHzxy(&C++语言&,10,10);//没有使用缺省参数
  PutHzxy(&C++语言&,10);//对y使用缺省参数,指定x的位置
  通常的情况下,一个函数应该具有尽可能大的灵活性。使用缺省参数为程序员处理更大的复杂性和灵活性问题提供了有效的方法,所以在C++的代码中都大量地使用了缺省参数。
  需要说明的是,所有的缺省参数必须出现在不缺省参数的右边。亦即,一旦开始定义缺省参数,就不可再说明非缺省的参数。
  例如: 
  void PutHzxy(char*str,int x=-1,int y=-1)//正确
  void PutHzxy(int x=-1,int y=-1,char*str)//错误
   六、使用STL
  STL(Standard Template Library,标准模板库), STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),并包括一些工具类如auto_ptr。几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。
  #include&vector&// 包含相关的头文件/
  typedef std::vector&int&//使用typedef 使代码看起来更简洁
  int main()
  for(int i=0;i&10,i++)
  vi.push_back(i);//使用push_back添加元素
  for(int i=0;i&vi.size();i++)
  std::cout&&vi&&& &;//[]操作符被重载,使得我们可以像访问数组一样访问vector中的元素
[编辑本段]
【C++的集成开发环境】
  1.visual studio(visual C++)
  2.Borland C++ Builder
  3.eclipse(CDT)
  4.Dev-C++
  5.Code::Blocks
  6.Codelite
[编辑本段]
【C++著作】
  《The C++ Standard Library: A Tutorial and Reference》原文版
  中文版:《C++标准程序库:自修教程与参考手册》
  这是一本百科全书式的C++标准库著作,是一本需要一再查阅的参考大全。它在完备性、细致性以及精确性方面都是无与伦比的。本书详细介绍了每一标准库组件的规格和用法,内容涵盖包括流和本地化在内的整个标准库而不仅仅是STL。正如本书副标题所示,它首先适合作为教程阅读,尔后又可用作参考手册。
  浅显易懂的写作风格使得这本书非常易读。如果你希望学习标准库的用法并尽可能地发挥其潜能,那你必须拥有这本书。正如网络上所言,这本书不仅仅应该摆在你的书橱中,更应该放到你的电脑桌上。我向每一位职业C++程序员强烈推荐。
  《Standard C++ IOStreams and Locales: Advanced Programmer's Guide and Reference》原文版
  中文版《标准C++输入输出流与本地化》
  C++标准库由STL、流和本地化三部分构成。关于STL的书市面上已经有不少,但罕见流和本地化方面的专著。本书是这两个领域中最优秀的一本,迄今为止没有任何一本书比这一本更全面详尽地讨论了流和本地化。如果你不满足于停留在“会用”流库的层面,千万不要错过它。
  2001年夏天,我草草翻阅过这本书的中文版,从内容到包装都给我留下了比较深刻的印象——不过负面的居多一些。2003年秋天,无意中得知某网络书店正以超低价格甩卖这本书的中译本,情不自禁,一阵唏嘘。
  《Effective STL》影印版、中文版
  读完Scott 的《Effective C++》和《More Effective C++》的中译本之后,我一直期待这本书的中文版。我从潘爱民先生的个人主页上了解到,他和他的合作伙伴似乎早已完成了这本书的翻译工作,可惜至今市面上仍不得见。幸运的是,我们可以看到它的原版。
  本书是使用STL的程序员必读之作。在这本书中,Scott向我们讲述STL容器和算法的工作机制以及如何以最佳方式使用它们。和Scott的其他作品一样,这本书的写作风格清晰、精确,具有极佳的可读性。看过这本书以后,我想你也许会和我以及其他C++程序员一样产生这样的想法:Scott什么时候会写出一本“More
  Effective STL”?
  《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》影印版、中文版《泛型编程与STL》
  关于STL,我还提醒你留心Matthew H. Austern的《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》(《泛型编程与STL》,中国电力出版社)。这本书散发着浓厚的学院气息。Andrew Koenig和Barbara Moo在《Accelerated C++: Practical Programming by Example》一书末尾郑重推荐另外两本进阶好书(除了他们自己的《Ruminations on C++》外),其中一本是TCPL,另外一本就是本书!
  网络编程
  在网络编程时代,C++应该扮演着怎样的角色,让ACE(Adaptive Communications Environment)来告诉你。
  Douglas C. Schmidt, Stephen D. Huston,《C++ Network Programming》Volume 1: Mastering Complexity with ACE and Patterns、Volume 2: Systematic Reuse with ACE and Frameworks
  中文版:,《C++网络编程》卷1:运用ACE和模式消除复杂性、卷2:基于 ACE 和框架的系统化复用
  采用C++进行企业级网络编程,目前ACE(以及这两本书)是一个值得考虑的选择。ACE是一个面向对象、跨平台、开放源码的网络编程框架,目标在于构建高性能网络应用和中间件。Douglas是ACE的创始人,Stephen则已为ACE提供了数年的技术支持和顾问服务,两位都是ACE社群(是的,ACE的影响和实际应用的程度已经形成了一个社群)的专家。
  ACE并不单单被大学和研究所追捧,它已经被成功地应用于世界上成千上万个商业应用中。在电信、宇航、医药和财经领域的网络系统中,ACE已经并继续发挥着重要的作用。如果你准备开发高性能通讯系统,你应该考虑考虑这一汇集世界顶尖专家智慧的成果。
  除了使用C++面向对象设计技术和模板等高级语言特性外,ACE还运用了大量的模式。《C++网络编程》卷1和卷2并不仅仅教你关于ACE的方方面面,它还会教给你模式和通用框架设计等高级技术等。所以,作为一名中、高级C++程序员,即使你很少进行正儿八经的C++网络程序设计,阅读这两本书同样可以从中受益。
  是的,并非所有网络应用都要使用Web服务器(以及其他应用服务器)和重量级组件模型,换个思路,它们或许也可以从轻量级的ACE组件中获益。
  以下几本书所以被列入“杂项”单元,是因为我没有考虑到合适的归类方法,它们和上面的书籍一样,值得一读。
  Bruce Eckel,《Thinking in C++》影印版二版、三版(又名卷二)
  中文《C++编程思想》二版、卷一:标准C++导引 卷二:实用编程技术
  《Thinking in C++》的第1版于1996年荣获“软件研发”杂志评选的图书震撼大奖。最新推出的第2版对内容进行了大幅改写和调整,以反映C++标准化带来的影响以及近几年面向对象领域最新研究和实践成果。“输入输入流”、“多重继承”、“异常处理”和“运行时类型识别”等高级主题连同C++标准化以后增加的一些内容则被放入第二卷中。Bruce是一名经验丰富的C++讲师和顾问,其培训和写作经验都是世界一流水准,他的作品比那些“玩票”的技术人员写的东西更能吸引读者。事实上,在同类图书中,对于大多数读者而言,这本书的可读性要超过TCPL和《C++ Primer》。顺带一提,访问作者的站点,你可以先睹第二卷的风采。
  Andrew Koenig, Barbara E. Moo,,《Ruminations on C++: A Decade of Programming Insight and Experience》原版、中文版《C++沉思录》
  Andrew是世界上屈指可数的C++专家。这是一本关于C++编程思想和程序设计技术而非语言细节的著作。如果你已经具有一定的基础,这本书将教你在进行C++编程时应该怎样思考,应该如何表达解决方案。整本书技术表达透彻,文字通俗易懂。Bjarne这样评价这本书:本书遍布“C++是什么?C++能够做什么?”的真知灼见。
  Stanley B. Lippman,《Inside The C++ Object Model》影印版、中文版《深度探索C++对象模型》
  从编译器的角度观察C++可以使你知其然并知其所以然。本书探讨了大量的C++面向对象程序设计的底层运作机制,包括构造函数、函数、临时对象、继承、虚拟、模板的实例化、异常处理、运行期类型识别等,另外还介绍了一些在实现C++对象模型过程中做出的权衡折衷。喜欢刨根问底的C++程序员不要错过这本书。
  Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns:
  Elements of Reusable Object-Oriented software
  Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides,《Design Patterns:
  Elements of Reusable Object-Oriented software》影印版、中文版《设计模式:可复用面向对象软件的基础》
  设计可复用的面向对象的软件,你需要掌握设计模式。本书并非专为C++程序员而写,但它采用了C++(以及Smalltalk)作为主要示例语言,C++程序员尤其易于从中受益。四位作者都是国际公认的面向对象软件领域专家,他们将面向对象软件的设计经验作为设计模式详细记录下来。这本书影响是如此深远,以至于四位作者以及本书都被昵称为GoF(Gang of Four)。本书学院气息浓厚,行文风格严谨简洁,虽然它不如某些讲解模式的书籍易读,但真正要精准地理解设计模式,本书是终极权威。学习设计模式,这本书需要一而再、再而三的咀嚼。顺带一句:请将设计模式化作开拓思维的钥匙,切莫成为封闭思维的枷锁。
  John Lakos,《Large-Scale C++ Software Design》中文版《大规模C++程序设计》、候捷:《STL 源码剖析》
  还有一些C++好书值得一读,恕此处无法一一列出。例如John Lakos的著作《Large-Scale C++ Software Design》(《大规模C++程序设计》,中国电力出版社)和侯捷先生的《STL 源码剖析》(华中科技大学出版社)等。
  《STL 源码剖析》是一本很有特色的书,但我认为它还可以更好。我个人期待侯捷先生自第一版发行以来经过对模板技术的沉淀和再思考之后,再写一本剖析得更深入、更透彻并且更全面的“第二版”。遗憾的是,侯捷先生在完成《C++ Templates: The Complete Guide》一书的翻译后似乎决定暂时告别模板、泛型编程和STL领域。
  使用C++成功开发大规模软件系统,不仅需要很好地理解大多数C++书籍中讲述的逻辑设计问题,更需要掌握《大规模C++程序设计》中讲述的物理设计技术。当然,这本书的确有点过时了,不过,如果你的精力和金钱都比较宽绰,买一本看看并无坏处。
  至此,我想有必要声明一下,有一些(好)书没有得到推荐,主要原因如下:
  以上这些书已经足够多、足够好了。
  我不会推荐通过正常渠道很难购买到的书籍 ——不管是中文版还是英文版。
  作(译)者名气大小不影响我的推荐。我们是在看书,不是看人。
  我不会推荐我从来没有看过的书。我至少要看过其中的某个版本(包括电子档)。这个“看”,一般指“认真阅读”,不过有一些也只能算是“浏览”。
  作为一名普通技术写译者,我深知技术创作和翻译的艰辛(和快乐),并多多少少了解一些有关技术书籍创作、翻译、制作、出版以及市场推介背后的细节。今天,我不会再对一本看上去差强人意的图书信口开河。罗列同一本书的各种版本的用意只在于为你多提供一些信息,让你多一种选择。
  在本文成文的后期,我给Bjarne写了一封信,请教如果他来写这篇文章会怎么写。他给了我简明扼要的建议。在肯定以上列出的绝大部分图书都是世界顶尖水平的C++著作的同时,Bjarne提醒我别忘了向专家级程序员推荐《The C++ Standard : Incorporating Technical Corrigendum No. 1》
  《The C++ Standard : Incorporating Technical Corrigendum No. 1》
  Bjarne还友好地提醒我,在我的推荐列表中没有哪一本有助于C++程序员进行Windows编程——这正是我的本意。在这篇文章中,我只推荐、点评平台中立的C++著作(网络编程除外)——和操作系统无关,和集成开发环境无关,我甚至幻想它们和编译器也无关。你可以根据业务开发需要,选读自己喜爱的领域相关的C++书籍。
  说到“系统无关、平台中立”,我不由得想起了“抽象层”的概念。开发实际应用的C++程序员通常工作于特定操作系统、特定开发环境和特定业务领域之中,而对标准C++和C++标准库扎实而深刻的把握,无疑是你得以在不同的操作系统、不同的开发环境以及不同的业务领域之间纵横驰骋的“抽象”本钱。
  C++面向对象程序设计(作者:Walter Savitch) 这本书是老外出的书,从基础到深入,很容从C过渡到C++
  C++ Primer中文版(第4版)(一本久负盛名的C++经典教程)
  作 者: (美)Stanley B. Lippman Barbara E. Moo Josée LaJoie 著,李师贤 等译
  出 版 社: 人民邮电出版社
  出版时间:
字 数: 1149000 版 次: 1 页 数: 745 印刷时间:
开 本: 印 次: 纸 张: 胶版纸 I S B N : 3 包 装: 平装
  【C++名人坊】
  有两位Google Maps API的初学者向我请教他们按照最简单例子写的程序为什么不能正常的运行。
  其中一位用GTalk跟我交流,我仔细了看了他的代码,没看出问题,把代码保存在本地,打开Firefox的错误控制台,用Firefox打开他的页面。出错的那一行被清晰的显示出来,我再仔细端详那句话,原来有两个应该是英文逗号的地方,写上了中文逗号。
  另一位,在我的论坛跟我交流他的Google Maps API中遇到的问题,我看他代码的时候也没有马上发现问题。然而,同样在用Firefox打开后,问题很明显的找到了,原来是一个方法openInfoWindow被他写成OpenInfoWindow了。
  在我帮助别人解决的程序调试问题中,这是非常常见的。人人都可能打出中文逗号,人人都可能把大小写写错。但是在我帮助他们解决问题以后,他们总是感慨的说,谢谢我解决了这个问题,这个问题困扰了他们几个小时,甚至是几天。
  这其实并不是只有初学者才会遇到的问题,我还帮助过些有非常丰富经验的工程师解决问题,有时候问题仅仅出自某个参数没有传递进来,或者是拼接字符串的时候少些了一个冒号,或者是拼接地址的时候漏掉了http:。我甚至帮助一些人调试一些我根本不懂的语言的程序,因为多半出现的问题,都和语言特性无关,不是程序员写错了字符,就是写错了逻辑,或者是错误理解了一个函数。
  出问题是正常的,写程序是一个复杂的边思考边打字的过程,笔误和一时糊涂都是难以避免的。程序员一般把这种问题叫做低级问题,因为这类问题跟你的智商完全无关,任何人都可能犯。
  但是,问题在于,有时候即使是很优秀的程序员,也会被一个低级错误困扰,可能会几天都解决不了。所以,关键在于,如何找到问题。
  遇到问题的时候:
  1,不要怨天怨地。出了问题,当然有可能是系统的bug,API的问题,但是那些几率往往比你犯低级错误的几率要低多了,先从自己身上找原因,是不是自己写错了。
  2,要掌握工具。最低限度你要会写Log,最好是Log和调试器结合。好 的工具可以大大的提高效率。以前有人跟我说,Dll不能调试,我发现可以;有人说多线程不能调试,我发现可以;有人说COM不能调试,我发现可以;有人说 IE插件不能调试,我发现可以;有人说OE插件不能调试,我发现也可以。当然,你确实会遇到不能调试的时候,当年我们做东芝芯片的嵌入程序,一个组都没有 一个仿真器和调试器,但是至少可以用Log嘛,无非是麻烦点。
  3,分析问题要有逻辑。遇到问题可以先把所有的可能性都列出来,然后一个一个分析,肯定能找到原因的。
  4,要学会隔离问题。问题涉及到的代码越多,越难以理解,问题越难以解决。遇到这样的情况,可以利用Log或者调试器,一行代码一行代码的给它们洗清嫌疑,这样很快你就可以找到出问题的地方。如果代码特别长,程序特别复杂,可以用二分法来做,效率很高。
  5,千万不要懒惰,不要事事求别人。一次复杂的调试过程就像一部侦探剧,如果你有非常好的逻辑性,那这部剧的主角就是福尔摩斯,剧情一定非常精彩。我说这个是有巨大风险的,说真的我帮人调东西挺上瘾的,很有意思。但是我还是要告诉大家,一次高难度的调试之后,你的满足感绝对不亚于写了一个伟大的程序。
  要想不遇到问题,写代码的时候:
  1,要对写出来的代码负责。我很佩服那些写代码写100行都不执行一次的 高手,如果他们最后不被低级错误困扰的话我就更加的佩服了。我写程序几乎是写一行两行就要执行一次,每句话我都要确保执行效果跟我的预期一致。没错这样写的时候 可能慢一些,但是调试的时候很轻松,我可以很简单的确定哪些代码绝对没有问题。所以我写代码整体速度比一般人高。很多人学习新东西的时候喜欢把例子抄一遍,运行一下,改改,再运行。我喜欢一句一句的抄例子,抄一句两句执行一次,这样可以把例子透彻的理解,而且很难会遇到出现了问题找不到原因的时候。
  2,函数体功能块不要过长。我认为我的智商并不高,我很难接受一个程序的一个函数体或者一个功能块超越3屏(当然逻辑真的有那么复杂除外,你会发现越是简单的逻辑越是容易被人写的冗长)。很多人对面向对象耳熟能详,对封装继承看起来驾轻就熟。但是动不动就写出来个函数体超长的程序。这就像写本书从头到尾不点句号一样,会累死读者的。自己看的时候,估计也会被累的喘不过来气。这是我对基础教育的微词所在,他们连教会学生写函数都没教会,虽然表面上他们连面向对象这么高深的东西都教。
  3,缩进要对。这点很重要,虽然大部分语言不是像Python那样用缩进来决定逻辑块的位置,但是人看到缩进的时候,总是会以为这些缩进位置跟逻辑相关。尤其是在有大量的ifelse或者for循环等等的嵌套逻辑的时候,如果缩进错了,可能会直接让人把程序的逻辑读错。所以我拿到别人的代码,第一件事情就是整理缩进。我见过一些比较优秀的页面工程师,他们会在div结束的位置用注释写上这个div的id,这样层级关系就一目了然了。
  4,不断重构。随着程序的不断修改,有些部分会不断的增长,原来看着清晰的架构可能因为问题的复杂而慢慢模糊,也可能被修正bug的权宜之计弄的面目全非。不信你找一个经过多次修改的程序看看,是不是满目疮痍,是不是都很难认出是你自己的作品了。这在多人参与的项目中更加严重,每个人有不同的代码风格,经过多次杂交后,你肯定认不出你的代码是骡子是马,还是四不像了。随着程序的慢慢成长,原来有些函数体会慢慢膨胀,需要拆分;有些原来简单的功能块四处都需要,应该被提炼成函数或者方法,等等。现在不重构,未来等到代码复杂到无法控制的时候,重构的工作就会变得更加困难。我见过最强的案例是,一个几千行的电子辞典配套联机软件,经过无数次的改版,变成了一个几乎无法维护的主窗体的cpp有1万8千行的怪物。最后经过复杂的重构,才变成一个出新版本只需要新增一个驱动程序的可以维护的几千行的程序。
  郝培强:银杏技术咨询创始合伙人,网名Tinyfool,技术方向是全文检索,搜索引擎优化,网站架构设计等。 银杏技术咨询的主要业务是帮助客户的网站改进技术,提高网站性能和反应速度,解决门槛性技术问题,从而提高用户满意度。
  【CSDN独家专访】有的时候我们对一款产品表现出难以名状的喜爱之情,往往我们就会想像做出这样功能的程序员他应该是多么的伟大,是什么样的天才,对他就如同造物主一般的崇拜,所以很多人会把成为一个程序员作为自己的理想,然而很少有人会知道,在这样一款产品的背后,其实还有一个更加强健的团队在护送着他前行。
  而这个团队的领军人物就是产品经理。近日,我们都很熟悉的暴风影音发布了它最新的3.1版本,这距离上次的3.0版仅过了45天。暴风影音做为一个日使用量在千万级别之上的客户端软件,产品里的任何一个角落有瑕疵,任何一个细节有Bug,被用户识别到的几率非常大,这和普通的应用软件是不能比的。所以需要做大量的用户反馈,数据分析,数据挖掘的工作,来提升软件本身的性能,那么,如果作为暴风影音的产品经理,他的身上又发生着什么样的故事呢?我们带着这样的好奇心采访了暴风影音的产品经理王志鹏。
  王志鹏是一个很健谈的人,但在倾听的时候却很真诚。“也许这就是做一名产品经理所必备的基本素质。”王志鹏对我们的赞赏这样回答道,“判断自己适不适合做一名产品经理,你需要为自己做一个这样的测试,如果有十个人分别提出了十种功能改进的方案,那么你是否能够发自内心的把这十套方案都耐心、认真的听完,并且能够真正领会到他们的意图,即使这其中有不切实际的方案、有令人哭笑不得的方案,但是如果你是有兴趣去做这件事,而且付出的都不会成为你的心理负担,那么你就具备了成为一名产品经理的基本素质”。
  在做产品经理之前王志鹏也是一名技术人员,他也很喜欢做技术,那么是什么让他实现了从一名技术人员到一名产品经理这样的一次转型呢?“其实我很早就立志我要做技术开发,大学毕业以后我在一家公司做ERP软件,由于ERP软件的特殊性,是需要跟很多的业务部门进行沟通来了解他们的运作状况之后才能够编写软件代码的,所以渐渐的我发现,我的编程技术或者说是一些技巧并不是最好的,但我是最懂得我们业务人员需求,最懂得他们要什么的人。”也许就是这样的一段时间,让王志鹏考虑了自己的特长可能会在这里有更好的发挥。
  也许就是凭着良好的沟通和理解能力,不久,王志鹏就被一家知名的国际软件厂商看中收入麾下,并担任项目管理的工作。“这段时间里我主要是在做项目甲方和乙方之间的桥梁,做时间、人员和资源方面的协调分配”王志鹏说,“在这段时间里我已经不做具体代码的编写工作了,这也让我有机会在抽离了具体的代码编写工作之后看清楚了一名技术人员在项目实施过程中会出现的问题,更重要的是让我深刻的体验到了这样的一家国际软件厂商他在软件产品生产的过程中积累下来的流程和规则,在这样的流程和规则下运作的软件生产活动,不管是谁都可以很好的完成高质量的产品”。也正是在这里,王志鹏完成了他的转型。
  “其实在这个转变的过程中,我也有过挫败感的时候。”王志鹏说,“曾经我认为从一个技术人员转型到产品经理是容易的,其实不然。在有过失败之后,我开始反思我这样的想法,非常幸运的是我找到了出口”。从王志鹏感悟中我们找到了转型过程中最核心的三点:
  1、敬畏之心。无论是技术人员面对产品经理还是产品经理面对技术人员,大家一定要抱有敬畏之心,要尊重和重视别人的意见,不要认为自己就是正确的,一个人提出任何一种想法一定是经过了思考的,不能单纯的认为这个想法“幼稚”、“不可能”,更多要想的是为什么他会有这种想法。
  2、主动沟通。技术人员和产品经理其实各自运行的是两套逻辑。技术人员在考虑问题的时候最先是从后台着眼,继而考虑架构然后开始编写代码的过程;而产品经理在考虑问题的时候首先是从用户开始,继而是用户体验、完全以市场驱动为主导。这样两种完全不同的思考方式造就了不同的工作习惯。
  程序员完全可以只考虑自己技术实现的这一部分,做到精美、高效那他就是一个合格的技术人员,而产品经理需要的是Open的方式,需要和不同的人沟通他们各自的感受,因为代码的对和错有明显的界限,而用户体验没有对和错,只有好和更好,而自己的习惯并不能代表大家习惯,所以要通过主动的沟通和倾听来知道各种各样的体验是怎样的。
  3、大量阅读。不仅仅要阅读相关专业类书籍更要有广泛阅读的习惯。因为这样能够培养人文的思维习惯,这也是单一研究理工科类的技术人员所欠缺的,编程需要逻辑思维的缜密,而阅读能够让你看事情的时候更换另一种逻辑,也让你的思维变得更加全面。
  获得成功是每个人都需要的,但是成功并没有一条可以遵循的路线可以走。并不是说程序员到了一个规定的阶段就一定需要转型,一定需要专向产品经理,或者一定需要出去创业。“我并不赞同每个技术人员都要考虑自己该如何转型,真正要考虑的是看请自己突出的特点在哪里。”王志鹏说,“在我们的工作过程中,并不是像升学考试一样,要一张桌子四条腿一样长,所谓的全面发展,如果数学能考120分,语文能考60分,而继续学数学就能考130分,同样的力气学语文可能可以靠90分,那毫不犹豫的应该去学语文;但是在工作中,如果我写代码能得80分的认可,做管理、做沟通能得60分的认可,而继续努力写代码就能到95分,继续努力尝试管理和沟通能得到80分,那么,奉劝大家还是要继续向95分的代码去努力。因为这就是你的特长,如果为了全面而放弃了你的特长,将是一个巨大的浪费。”
  王志鹏的经验令我觉得这应该就是社会分工的规律所在,每个人都有自己的角色,要认清的是自己的核心竞争力,而在这里木桶效应是失效的。如果要打破这种规律的话,那可能会付出很大的代价 。
好文章特此奖励(希望能有原创) ...
不错不错不错不错不错不错不错不错不错不错不错不错不错不错不错
助理工程师
呵呵&&没有学编程的天分啊!~
看完说两句:
首先,作为普通程序员,不需要太多的潜质,因为大多数都是IT民工,而很多需求都是给生活逼出来的。我出道的时候一个月学完DELPHI,然后就负责开发项目那样。那些有潜质的人就留着开发一门新语言吧。
其次,C++做为一门很全面的面向对象语言,可能内容太多新手不好掌握,但应用范围很广,处了底层给C和汇编占领外,其他地方都有它的身影。现在经常出来某个新语言很好用而且很火,但这门语言可能是某个公司的私人语言,如果某天……,后果是很明了的。而C++是一个国际标准,由ISO机构维护,一般出来一个新的CPU类型都会出对应C/C++编译器的。所以毫不夸张地说,C++是开发其他高级语言的语言。
最后,其实C++不像某些人描述的那么难学,如果你有时间,一天看完大概概念,然后再用六天补充细节,就已经学会基础了,再加上一点MFC或QT等东西就可以去开发了。编程序就是堆积木,很多时候没必要去自己制造一块积木。
程序设计,算法为王。
提出问题;分析问题;确定算法;画出流程图;编辑程序;调试程序;建立文档资料。
大家在开发板块贴代码的时候,请使用“插入代码”的功能。
[code]int main(){return 0;}[/code]
中级工程师
你这是C++的介绍么???呵呵!了解一下下!!
提示: 作者被禁止或删除 内容自动屏蔽
看完,是感觉有点蒙的,不过我觉得很值,里面很多思想让我受益不少,在这里谢谢楼主了!
中文的部分我会读也、&&可是:( 英文的部分就麻烦了。
这能应该不能学C家家吧?
同意楼上的
学了但又好久没有用了差不多也忘了
助理工程师
也想学好一门编程语言,可是就是觉得自己在那方面天赋不高,谢谢LZ的信息。
看来我没有学习C++的潜质:L
助理工程师
想学好一门编程语言,可是就是觉得自己在那方面天赋不高
新手学习了。。。。
:D 挺不错的啊,谢谢楼主啊....
初级工程师
楼主太仔细了
Knowledge of the creation of wealth
大学学这玩意儿的时候挺伤的 。。。咱的确没这天赋
助理工程师
这个不适合我学!!
:(pdd_23): 哦也,我不用学了
C++确实比较难!楼主吓坏了老多人啊!

我要回帖

更多关于 刚毕业程序员好多不懂 的文章

 

随机推荐