1C++语言程序设计课程介绍张磊博士副教授zhanglei@cumt.edu.cn2平时20%作业10%出勤10%考试80%考核方式3课程基本信息C++语言程序设计(第四版)教材:郑莉等编著,清华大学出版社,2010答疑地点:计算机楼计B503上课时间:周二1、2,周四1、2地点:教3-A101学时:404参考资料《C++Primer中文版》(第4版)S.B.Lippman等编著,李师贤等译,人民邮电出版社,2006《C++程序设计语言》(特别版)B.Stroustrup著,裘宗燕译,机械工业出版社,2010《C++编程思想》(第2版)B.Eckel著,刘宗田等译,机械工业出版社,2005.《AcceleratedC++中文版》A.Koenig等著,靳志伟译,机械工业出版社,2008.5C++编程思想(实用编程技术)B.Eckel著,刁成嘉等译,机械工业出版社,2006.VisualC++2010入门经典(第5版)I.Horton著,苏正等译,清华大学出版社,2010.C++探秘:68讲贯通C++R.Lischner著,刘晓娜等译,人民邮电出版社,2011.6网友关于C++参考书的推荐第一类读者属于那些没有计算机编程基础的人,当然这并不影响他把C++作为学习的目标,但是为了能够顺利地学习,必须重视学习计算机的基础知识。可以推荐的书目包括:JamesP.Cohoon的《C++程序设计》、Deitel父子的C++大学教程(第二版)。学习能力强、要求高的读者可以阅读讲解更加细致的《C++编程金典(第3版)》。7第二类读者是有计算机基础知识,学习过编程的人。属于初级水平,可以阅读的书包括:《C++PrimerPlus》、《C++编程金典》、《C++Primer》、《C++编程思想》;学习能力强,要求比较高的读者可以选择BjarneStroustrup的《C++程序设计语言(特别版)》。通过各种途径学习过C++的人,可以在比较高的起点系统地学习C++,典型的书就是:BjarneStroustrup《C++程序设计语言(特别版)》。我认为这是所有的C++学习者最终应该阅读的一本书。8一个初级读者,除学习系统的教科书外,还需要对自己的编程环境有深入的了解,才可能动手进行实践。其中Petzold的《Windows编程(第五版)》(北大出版社)、《Unix高级编程》(人民邮电出版社)以及其他讲述Windows编程、LinuxUnix编程环境的相关的书目可以帮助达到这一目的。一个中高级读者,除学习系统的教科书外,还可以阅读一些参考书。可推荐的介绍STL的书籍包括:《C++标准程序库--自修教程与参考手册》、《C++STL(中文版)》和《STL源码剖析》;另外,《数据结构算法与应用-C++语言描述》很好地介绍了C++用于数据结构的使用方法。9《EffectiveC++中文版2ndEdition》、《MoreExceptionalC++中文版》以条目的方式介绍了现代C++编程中常见的问题。对于熟悉C++的用法和概念有一定帮助。《C++精髓——软件工程方法》则属于比较系统地对C++的运用进行论述和分析。尽管该书对STL的篇幅略显单薄,但仍不失为一本值得阅读的好书。《C++语言的设计和演化》出自BjarneStroustrup之手,阅读这个历史,可以领悟C++发展过程中各个特性的始末由来,知其然,又知其所以然。是精通C++的必读书籍。10BjarneStroustrup(本贾尼·斯特劳斯特卢普)关于C++的FAQ1950年出生于丹麦,先后毕业于丹麦阿鲁斯大学和英国剑桥大学,AT&T大规模程序设计研究部门负责人,AT&T、贝尔实验室和ACM成员。1979年,B.S开始开发一种语言,当时称为“CwithClass”,后来演化为C++。1998年,ANSI/ISOC++标准建立,同年,B.S推出了其经典著作TheC++ProgrammingLanguage的第三版。C++的标准化标志着B.S博士倾20年心血的伟大构想终于实现。111.学习C++要花多长时间?这要看你说的“学习”是什么意思了。如果你是一个Pascal程序员,你应该能很快地使你的C++水平达到与Pascal相近的程度;而如果你是一个C程序员,一天之内你就能学会使用C++进行更出色的C风格编程。另一方面,如果你想完全掌握C++的主要机制,例如数据抽象,面向对象编程,通用编程,面向对象设计等等,而此前又对这些东西不很熟悉的话,花上个一两年是不足为奇的。那么是不是说这就是学习C++所需要的时间呢?也许再翻一番,我想打算成为更出色的设计师和程序员最起码也要这么长的时间。如果学习一种新的语言不能使我们的工作和思想方式发生深刻的变革,那又何苦来哉?跟成为一个钢琴家或者熟练掌握一门外语相比,学习一种新的、不同的语言和编程风格还算是简单的。122.了解C是学习C++的先决条件吗?否!C++中与C相近的子集其实比C语言本身要好学,类型方面的错误会少一些,也不像C那样绕圈子,还有更好的支持库。所以应该从这个子集开始学习C++。3.我如何开始学习C++?这取决于你的基础和学习动机。如果你是个初学者,我想你最好找个有经验的程序员来帮助你,要不然你在学习和实践中不可避免的犯下的种种错误会大大地打击你的积极性。另外,即使你的编译器配备了充足的文档资料,一本C++书籍也永远是必不可少的,毕竟文档资料不是学习编程思想的好教材。134.语言的选择是不是很重要?是,但也别指望奇迹。很多人似乎相信某一种语言能够解决他们在系统开发中遇到的几乎所有问题,他们不断地去寻找完美的编程语言,然后一次次的失败,一次次的沮丧。另外一些人则将编程语言贬为无关紧要的细节,把大把大把的银子放在开发流程和设计方法上,他们永远都在用着COBOL,C和一些专有语言。一种优秀的语言,例如C++,能帮助设计者和程序员做很多事情,而其能力和缺陷又能够被清楚地了解和对待。145.ANSI/ISO标准委员会是不是糟蹋了C++?当然不是!他们(我们)的工作很出色。你可以在一些细节上找些歪理来挑刺,但我个人对于这种语言以及新的标准库可是欣欣然。ISOC++较之C++的以前版本更出色更有条理。相对于标准化过程刚刚开始之初,你今天可以写出更优雅、更易于维护的C++程序。新的标准库也是一份真正的大礼。由于标准库提供了strings,lists,vectors,maps以及作用于其上的基本算法,使用C++的方式已经发生了巨大的变化。156.你现在有没有想删除一些C++特性?没有,真的。问这些问题的人大概是希望我回答下面特性中的一个:多继承、异常、模板和RTTI。但是没有它们,C++就是不完整的。在过去的N年中,我已经反复考虑过它们的设计,并且与标准委员会一起改进了其细节,但是没有一个能被去掉又不引起大地震。从语言设计的角度讲,我最不喜欢的部分是与C兼容的那个子集,但又不能把它去掉,因为那样对于在现实世界里工作的程序员们来说伤害太大了。C++与C兼容,这是一项关键的设计决策,绝对不是一个叫卖的噱头。兼容性的实现和维护是十分困难的,但确实使程序员们至今受益良多。但是现在,C++已经有了新的特性,程序员们可以从麻烦多多的C风格中解脱出来。例如,使用标准库里的容器类,象vector,list,map,string等等,可以避免与底层的指针操作技巧混战不休。168.如果不必和C兼容,你所创造的语言是不是就会是Java?不是,差得远。如果人们非要拿C++和Java来作比较,我建议他们去阅读TheDesignandEvolutionofC++,看看C++为什么是今天这个样子,用我在设计C++时遵从的原则来检验这两种语言。这些原则与SUN的Java开发小组所持的理念显然是不同的。除了表面语法的相似性之外,C++与Java是截然不同的语言。我发现在电视和出版物中关于Java的鼓吹是不准确的,而且气势汹汹,让人讨厌。大肆叫嚣凡是非Java的代码都是垃圾,这是对程序员的侮辱;建议把所有的保留代码都用Java重写,这是丧心病狂,既不现实也不负责任。Sun和他的追随者似乎觉得为了对付微软罪恶的“帝国时代”,就必须如此自吹自擂。但是侮辱和欺诈只会把那些喜欢使用不同编程语言的程序员逼到微软阵营里去。179.您怎么看待C#语言?就C#语言本身我没什么好说的。想让我相信这个世界还需要另外一个专有的语言可不是一件容易的事,而且这个语言还是专门针对某一个专有操作系统的,这就更让我难以接受。直截了当地说,我不是一个专有语言的痴迷者,而是一个开放的正式标准的拥护者。1810.你愿不愿意将C++与别的语言比较?有不少书评家邀请我把C++与其它的语言相比,我已经决定不做此类事情。在此我想重申一个我很久以来一直强调的观点:语言之间的比较没什么意义,更不公平。我没时间,而且作为C++的创造者,在公正无私这一点上我永远不会获得完全的信任。换言之,我认为C++是大多数人开发大部分应用程序时的最佳选择。11.在做小项目时,C优于C++吗?我认为非也。除了由于缺乏好的C++编译器而导致的问题之外,我从没有看到哪个项目用C会比用C++更合适。19林锐关于编程的论述林锐,男,1973年2月4日生,2000年获浙江大学计算机系CAD&CG国家重点实验室计算机图形学博士学位。1996年获电子工业部科技进步二等奖,1997年获首届中国大学生电脑大赛软件展示一等奖。2000年7月加入上海贝尔有限公司,从事软件工程和CMM/CMMI研究与推广工作,出版著作三部,2003年7月当选为Alcatel集团技术委员会会员。2004年创建上海漫索计算机科技有限公司。20无论是什么好方法,贵在理解与灵活运用,而不可当成灵丹妙药,不象“吃了脑黄金或脑白金,就能使一亿人先聪明来”。如果程序经理发现有两个程序员趴在机器旁睡觉,不能只对其中一个大声吼叫:“你一编程就想睡觉,看看人家,在睡觉时都想着编程。”改错是个大悲大喜的过程,一天之内可以让人在悲伤的低谷和喜悦的颠峰之间跌荡起伏。如果改过上万个程序错误,那么少男少女们不必经历失恋的挫折也能变得成熟起来。21课程目标了解程序设计的概念和基本方法掌握C++语言的基本语法和语义学会算法设计的基本方法与技巧提高学生的编程能力和程序调试能力22学习要求按时上课、认真听讲重基础,多练习,勤思考23课程内容C++编程基础面向过程的结构化程序设计面向对象程序设计24结构化程序设计C++基本元素:字符集与词法记号(词汇)基本数据类型表达式与语句算法与三种基本结构数组、指针与字符串函数输入输出文件操作预处理与多文件工程C++面向过程的结构化程序设计25面向对象方法类与对象构造函数与析构函数结构体与联合体数据的共享与保护对象的生存期静态成员与友元继承与派生、访问控制、多态性、运算符重载、虚函数模板面向对象程序设计