大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C++技巧 > 编程及C/C++初学者常见问题(FAQ)

编程及C/C++初学者常见问题(FAQ)(12)

关键词:编程C/C++初学者FAQ常见问题  阅读(5280) 赞(32)

[摘要]本文意在集中解决新手学习C/C++语言时将遭遇到的各类问题,本文主要分析概念原理和解决方案,不讨论具体程序语法,立足于让初学者能运行起第一个程序。其他事宜如解释入门语法等本文基本不涉及。
有时候,有些大型程序,比如Autodesk公司的AutoCAD,当你对他的某些功能不满或是感到有改进的必要时,它提供了编程改变的可能,相对于第一次开发来说这就叫二次开发。二次开发时,原始程序所提供的那些服务也被称为API。

   使用砖块盖楼确实很方便,但如果能使用预制板,那就更方便了。比函数更高一级的可以复用的程序模块叫做类。类的使用比函数复杂,但是它可以更广泛的复用,是更高级的软件复用形式。类,同样可以聚集成类库。能够使用类的语言,就会规定标准类库。C++比C更强大,更难学,就是因为,C++除了具有C所有的函数库之外,还有一个完整强大的标准类库。

   在类库当中,有一种很特殊的类,称为控件(control)。控件在快速的窗口程序开发中特别有用。它可以实现拖放式的编程。举例来说,想要编写一个有一个按钮的窗口程序。那么只要先创建一个窗口程序的工程,这个工程会自带一个窗口控件,而且直接显示在工作区里,然后再用鼠标把按钮控件从控件板上拖到窗口里需要的位置,按钮就摆放好了。至于按钮的功能,就需要程序员来编程实现。将来编译运行之后,程序的外观就和设计的外观一模一样。控件极大的提高了编程效率,但因为它需要自动生成某些代码,所以需要编辑环境的支持,支持控件的编辑环境总体来说比较少。控件的总和,就是控件库。

   所有这些,函数、API、类乃至控件,开发必备,就象旅行时必需携带的行李一样,于是被统称为开发包(SDK : Software Development Kit)。最著名的SDK就是windows提供的Win32SDK了。有些开发包是编译器自带的,如标准库等等。有些包是第三方厂商提供的,比如微软的DirectX系列开发包专为游戏编程所设计。所有开发包都需要集成开发环境(内带编译器)的支持,有的要编译器提供内部实现,有的要编译器给于连接,有的要编译器生成代码。不同的编译器提供的方式不太相同,这就造成了编译器之间的差异,有时,甚至导致某个开发包不能在某款编译器上使用。

   为了进一步提高程序员的工作效率,很多集成开发环境还发明了另一些方法,相当于直接用一间间的房子叠在一起做成居民楼,你几乎只要刷刷外墙漆,就可以完成了,这被称为应用程序框架。可惜,不同的厂商的方法根本不同,这进一步扩大了集成开发环境之间的差异。

   不管未来怎样,至少现在,编程的规模变得越来越大,也越来越需要更多人的智慧。每个人的智慧都是有限的,不应该被浪费,充分使用每个人的智慧,才能取得成功。软件复用就是整合所有人智慧的方式之一。从你编程的第一天开始,请牢牢记住:软件复用。要复用,复用,再复用。

关于图形库的补充说明

         --------可选择的图形库

   黑客们很偏爱控制台,但对于用户来说,图形界面是他们更熟悉的。我们也喜欢编写GUI程序,因为那看起来确实更友好也更有成就感。那么,怎样才能编写GUI,需要什么东西呢。

   答案是:图形库。每一个操作系统,都会提供一套API(不理解的请回头看上面一小节),如果该系统支持GUI,那么它的API中就会有一个图形子系统和窗口管理子系统。其中图形子系统包括了基本图形元素的绘制,比如画点线面、显示文字图片和上色渲染等等,窗口管理子系统首先会包含图形子系统,再增加上包括窗口和窗口元件的绘制、窗口的遮盖、移动调整,以及鼠标点击这类事件的传递处理等等这些内容。在Windows下,图形子系统就叫GDI(Graphics Device Interface)。其他平台也有类似的接口,在TC下可以通过扩展的graphic.h来实现画图,不过窗口的支持要另行实现。此外,为了应对3D绘图在速度和效果上的需求,有专门的3D加速图形库被开发出来,最著名的就是DirectX和OpenGL。其中前者只能用于Win平台,但除了图形之外还整合其他很多功能,用他搞出了大量的windows游戏。后者跨平台,能在从家用到大型商务等各方面使用而且性能卓越,无数的好莱坞电影都是用OpenGL渲染生成的。

   但是即使有图形库窗口管理库,GUI编程仍然是相当的繁琐。首先是要完成某个工作必须填写大量按部就班的代码,而且这些代码在程序内部和各个程序之间重复着。这提示人们应该在图形库的基础上作进一步的抽象。简单来说就是要在画点画线函数的基础上做出画二次曲线画立方体的模块。幸运的是,这些工作已经有人完成了,而且是不止一套。

   这些东西按照功能强弱,有的叫图形用户界面库,有的则叫应用程序框架。在windows下,使用VC的人 可以选择MFC ATL,使用Delphi和BCB的,可以用VCL,至于VB,它本身就是和图形库捆绑在一起。如果你选择.net阵营,.net framework 就是你最好的选择。

   如果你希望程序不止在windows使用,那么跨平台的QT GTK+ wxWindow 都是你的好选择。他们在保证效率的同时,适当抽象,抚平了底层操作系统的差异。

   对于学习C++的人来说,上述库都是可以用的。但如果你是C语言死忠,就我的认知,可以直接用API,否则只有一个选择:GTK+。实体书比较少,相关资料推荐去线上查。

四、教材、习题和示例

能推荐几本好书么

   当然,FAQ的目的之一就是这个。我将分别介绍纯C、C++以及widows编程、数据结构算法以及图形库等等的教材。市场上这些主题中任意一个的教材都是汗牛充栋,读都读不完。不过很显然,大家都公认的经典,也只是那么寥寥数本而已。下面推荐的都是这样的著作,当然总是有好作品在不断推出,我这里不可能把他们都列举出来,你可以用自己的犀利的目光把他们挑出来。

首先是纯C的教材

   第一本:H.M.Deitel和P.J.Deitel的《C HOW TO PROGRAM》(C程序设计教程)。

   作者是父子,从事语言教材的编写合计超过40年,本书被美国众多高校选用为教材,既可入门也可翻阅,甚好。本FAQ作者认为如果你只打算看一本的话,那就选他好了。


   第二本:Brian W.Kernighan和Dennis M.Ritchie 的《The C Programming Language 》(C程序设计语言)。

   此书简称K&R,由C语言的创建者撰写,是全球销售最多的C语言教材,其品质不容置疑。不过不适合入门,适于在入门之后巩固提高。实体书有原版和译本购买,电子版英文较多。


   第三本:谭浩强的《C程序设计》。

   优点在于,面向中国学生,语言易于理解,而且全书篇幅小,看过的人多,容易找到人请教。但是各方面的概念不深入,浅尝辄止,实际上还有些小错误,不是很严谨。因此适合第一次入门学习,例题做完基本就可以抛弃了。有实体书和电子版下载。同时配套有习题集和习题解答,适合自学。

   第四本:王大刚先生的《C语言编程宝典》。

   质量不错,与老谭的书一样非常适合中国学生,而且对于TC的图形编程讲解非常透彻。

   http://bbs.jcwcn.com/thread-181307-1-1.html

   第五本:无名作者的《C语言初学者入门讲座【系列讲座】》

   作者未知,质量同上一本。http://my.jcwcn.com/blog-1043159-13138.html

   第六本:Kenneth A.Reek 的《C和指针》

   进阶读物,把指针一章演绎为一本书可见其技术精度。指针是C的灵魂,能领会本书中的理念,才能算是真正明白了C指针的奥妙,才算懂得了C。

   第七本:Andrew Koenig 的 《C陷阱与缺陷》

   进阶读物,在认真读完上面的入门书之前,暂勿阅读。本书畅销14年历久不衰,足证品质。

   最后一本:ISO C89规范/C99规范

   一切关于C语言的疑问,只有一件东西最权威,那就是ISO的规范。但这不是正式出版物,是类似法律文本的技术说明,而且只有英文版。新手阅读,提防吐血而亡。

然后是C++的教材

   C++比C复杂的多,所以教材也就纷繁芜杂。既有综合性入门性的,也有专项深入的,阅读要循序渐进,以下分阶段介绍(以下文字有部分引用自他人评介)。

首先是毫无基础的时候,先要初步掌握语法并形成编程的概念

level 0:

   H.M.Deitel和P.J.Deitel的《 C++ How to Program 》(C++大学教程)。

   又是这对父子。有很多号称C++入门的书,但经我的观察,如果要选择能推荐给毫无编程概念的新手用的书,这本算是佼佼者了。此父子的《C程序设计教程》我已推荐了。

   仍然是K&R,Brian W.Kernighan和Dennis M.Ritchie 的《The C Programming Language》(C程序设计语言)。

   尽管C++之父亲口说,最好把C++看作一门新语言来学习,但我个人认为,一开始学习C至少有两大好处。相比C++,C还是非常简单的,易于掌握,避免你过早陷入C++的语法泥潭。同时,学C能让你对计算机的底层运行有所认识,建立良好的概念。

   钱能的《C++程序设计教程》

   国内C++教材中较好的一本,作者是教师,总结多年教学实践的经验写成的,比较适合国内学生。

   PS:老谭也有一本C++教材,在此就不太推荐了,它完全是用C的思维来看C++。

   当读者有一定c/c++基础

   推荐的阅读顺序:

   level 1

   从Stanley B.lippman著 侯捷 译的《essential c++》开始,短小精悍,可以对c++能进一步了解其特性。Stanley B.Lippman的职业是提供关于C++和面向对象的训练、咨询、设计和指导。他也是Bjarne Stroustrup领导的Bell实验室Foundation项目的成员之一,负责C++程序设计环境中的对象模型部分。简单说,他是C++的创建者之一。

   



相关评论