关于C++准备知识

关于C++ 显然你已经知道编程的含义,接下来我们要做的就是开始学习C++。那么什么是C++,为什么我们要学习C++。 什么是C++ C++ 这个词在中国大陆的程序员圈子中通常被读做 "C 加加",而西方的程序员通常读做 "see plus plus"。C++是一种计算机编程语言。她是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言,是现存的上百种计算机语言中一种被使用的非常广泛的计算机编程语言。 Bjarne Stroustrup (比加尼·斯楚士舒普) 博士在 80 年代发明并实现了 C++ (最初这种语言被称作 "C with Classes",带类的C)。一开始 C++ 是作为 C 语言 的增强版出现的,你可以认为C是C++的父亲。一方面,C++ 语言来源于 C 又尽量与 C 保持兼容,另一方面,从 Simula 语言借用的类、派生、访问控制等面向对象概念在带类的 C 中牢牢地扎下了根。Stroustrup 将 C 的高效和 Simula 的优雅捆绑在一起,造就了早期的C++。随后,从I/O 流开始,包括虚函数,操作符重载,多重继承,模板,异常,RTTI,名字空间等各种新特性被不断地增加到C++中。C++的每一次特性增加都是为了解决实际的需求而不只是为了美观。1998 年美国国家标准局语言标准化委员会会同国际ISO标准组织共同颁布了 C++ 程序设计语言的国际标准 ISO/IEC 14882-1998。现代的C++语言支持过程式程序设计,数据抽象,面向对象程序设计,泛型程序设计等多种程序设计风格,可以充分满足用户和系统对于开放性、高效率、兼容性和扩展性的各种苛刻需求。。而且随着技术的进步和用户的需求,C++还在进一步的发展。 由于C和C++的亲密关系,通常人们会把两者合在一起,并称C/C++语言。几乎可以说,C/C++就是当今最强有力的计算机语言.她不是最美的,但却是最有用的。 遗憾的是,由于 C++ 语言过于复杂,以及她经历了长年的演变,直到现在(2004年)只有少数几个 100% 符合这个标准的编译器出现。 但对于初学者来说,这些细微的差别是可以被忽略的。虽然C++来源于C,但她是一门独立的语言,并不依赖C,我们可以完全不学C语言,而直接学习C++。 注:以上文字部分来源于维基大百科全书。 为什么是C++ 现存市面上有近百种为人们所熟悉广泛使用的计算机语言,还有无数不为人所知用户稀少的计算机语言。那么。为什么我们选择了C++而不是别的呢。 第一点,难道你没有看到封面吗?这是一本C++的书。你怎么能指望一本名为C++的书在讲述java的事呢。而且你要知道,本书的作者,也就是我,其实只懂得C++而已,甚至连懂得也谈不上,只是相对其它语言更熟悉一些。 第二点,更重要的是,C++几乎展现了现代计算机编程语言的所有先进特征。其它各种语言的优秀特性在C++中都能够找到相应的特性,即使是少量不能对应的特性,也可以在C++中被模拟出来。这样,学习了C++之后,再去学习其他的语言,就已经没有很大的障碍了。一通百通就是这个意思吧。 第三点,C++是兼具速度和协作性的语言。在使用各种编程语言编写的程序中,直接使用汇编语言编写的程序,运行速度最快。C仅次于汇编,可以达到98%~99%的速度。而C++编写的程序,在优化过后,可以达到汇编的95%,而在最关键的部分,更是可以直接嵌入汇编语言程序来运行。除了速度之外,C++的各种现代特性使得他适合于大型软件的协作开发。试想,如果有500个程序员共同开发某个项目,他们之间的协调是多么困难的一件事。怎样把每个人的工作成果拼接在一起,如何保证某个人不经意间犯下的错误或是做出的改变不至于传播到整个系统,怎样相互沟通使得大家能对某个改变做出反应。所有这一切,借助C++和软件工程的思想,已经可以比较方便的做到。 第四点,由于以上特性,C++是目前业内使用最广泛的语言。举例来说,windows系统,各版本的Unix系统,其主体都是用C/C++编写的。由于速度和协作的需要,广泛使用的各种数据库、大部分大型软件。90%以上的电子游戏都使用了C/C++编写。而且,各种供程序员使用的函数库、类库和开发包,都会首先提供C/C++的接口。不论是计算机图形学、加密解密还是计算机编程的其他领域,C/C++简直就是编程界的普通话。根据 International Data Corporation 的统计,C/C++ 是全球开发者使用最多的编程语言。如果确实要投身编程界,不懂C/C++的话,根本就是Mission Impossible。 不过,反过来说,无论过去、现在还是将来,天底下不存在哪一门语言非学不可才能成为高手,思想最重要,“不会XXX语言不算真正的高手”之类的言论实在无聊之至。学C++,主要还是通过他学习编程思想。真正的武林高手,难道会局限于手里的那把大剑吗。 流行的C/C++编译器和集成环境介绍 常见的编译器有很多,有商业的,也有免费的,有windiws平台的,也有其它平台的。我们的选择还是蛮丰富的,不过要注意一点,一旦你选定了一种编译器,最好习惯性的长期使用它,否则,编译器之间的不同特性会让你无所适从,如果你不明白为什么,回头去看看函数和库那部分的内容。嘿嘿,脚踩两只船不只在追女孩子的时候是忌讳哦。 国内使用最为广泛的个人系统平台是Microsoft的Windows,Win下最常见的编译器有Visual C++系列,BorlandC++Builder系列,GCC系列及其它不太著名的编译器。 Visual C++ 先说Visual C++ 系列。Visual C++ 是一个C++的集成开发环境,是微软公司出品的大型编程开发工具组Visual Studio中的一个成员(地位如同MS Office 中的word),Visual Studio常常被简称为VS,而Visual C++常被简称为VC++或是VC。VC和VS具有相同的版本号,目前使用较多的有VC6.0版和VC.net版 。.net是Microsoft的下一代应用平台,它的具体内容很难用几句话说明,配合.net的推广,Microsoft提供了新一代的大型开发工具组VS.net。VS.net到目前有两个版本2002版(实际版本号7.0)和2003版(实际版本号7.1),据悉微软将于2005年推出2005版。对于初学者,推荐使用VC6,因为这个版本的系统要求比较低(完全安装仅需200M左右,400MHz的芯片win95即可顺利运行),运行速度也比较快。.net 2002/2003要求Windows2000以上的系统(而且安装时还要升级操作系统的组件),完全安装需3~5G硬盘空间,1.7GHz以上芯片512M内存方可较流畅运行。但是,2003对C++标准中的某些高级特性,尤其是模板和STL支持较好,因此在条件许可和需要这些特性的时候,2003是不错的选择。此外需要提一句的是,VC71对VC70的改进不是一星半点,但对于初学者,这些改进可以忽略。 VC支持标准库,由于是微软公司出品的编译器,与微软公司的windows平台的兼容性自然是无人能出其右。VC通常用于开发Windows程序,借助扩展开发包,也可以开发其它平台(PS2、Palm、Symbian和PocketPC等等)的程序。VC提供了几个可用的应用程序框件,其中最著名的就是MFC,虽然MFC还算比较好用,但说实话,和Borland的VCL库比起来,不是相差一点点,所以很多人宁可不用。 VC比较接近底层,即使使用MFC,仍然几乎每件事都要亲自手工完成,因此对于制作普通的窗口程序并不是非常方便。但是正由于VC一切都要亲自完成,使得程序员可以做到一切尽在掌握,只有想不到,没有做不到。因此那些不使用普通窗口的程序,比如游戏、驱动程序、后台服务、外挂和病毒等等大部分都是使用VC编写的。尤其是游戏,电子游戏界(包括各种游戏机)90%的游戏来自VC。 使用VC,总体来说就是繁琐、强大,开始阶段就需要长时间学习,熟练之后就可以随心所欲了。 本书所有的示例程序都在Windows 2000 平台,VC60环境下编译通过。 接着要隆重介绍的是另一个编译界的巨头 BORLAND。长期以来,Borland公司就只制作一种软件--编译器。快捷、易用、稳定、高效,所有你能想到的优秀特性,Borland的编译器都拥有。被称为编译器界的王者,Borland是当之无愧的。虽然在1996年之后,在微软的重金挖人攻势下,Borland的光芒渐渐被微软盖过。但是,Borland制作的编译器仍然是地球上最优秀的编译器之一。对于C/C++语言,Borland曾制作过多款编译器。其中有早期的Turbo C(简称TC),Borland C++和现在的主力产品Borland C++ Builder (简称BCB),无论哪一款都是扛鼎之作。 Turbo C 先说Turbo C ,中国的读者一定对这个程序非常熟悉,因为全国计算机等级考试中的C语言考试所使用的编译器就是TC 2.0,一直是。其实等级考试的另一门语言pascal,所使用的编译器也是Borland的。作为一个全国性的考试,考试所使用的工具当然要足够安全稳定才行。TC2.0版就已经能够很好的支持C++语言了,有条件的话可以使用TC3.0,它具有一些更优良的特性。在本书介绍的编译器里,TC具有两大突出特点。第一,他是DOS下的程序。这意味着在极低的配置(譬如只能运行DOS的系统)下,它也可顺利运行。在windows95/98系统下,他可以流畅运行。但在windows2000/XP等NT内核的系统上,由于系统对DOS程序支持的某些特性,运行TC的时候会出现CPU占用率始终保持100%的情况。同时他还意味着程序体积不大,完整安装好的TC3.0,只有300多个文件,7.6M左右。第二,他是仅有几个可以在集成环境编译单文件的编译器。这一点我想已经解释过了。 使用TC的好处就是两个字:小巧。没有复杂的设置,没有华丽的界面,极快的启动速度,简单的操作,快速的编译,不需要关注系统的细节,只要注意语言本身,非常适合新手学习和做习题。缺点也很明显,编写大型程序(尤其是有图形界面的)较困难,只能创建DOS程序。DOS程序可以在Win下运行,但不是标准Windows程序。 Borland C++ Builder 接下来是Borland C++ Builder,简称为BCB。常用的版本是5.0、6.0和新出的BCB X 1.0,比较流行的版本是6.0。BCB60的系统需求与VC60相似,性能也非常强大,尤其是在快速开发和数据库方面,BCB具有绝对的优势。 在BCB中提供了一个非常好的控件库,VCL(Visual Control Library),VCL可以说是业界最好的控件库。同时业界还有很多的第三方软件商也提供了可以在BCB中使用的控件。使用控件库在BCB下初学者只需要五分钟,就可以编出一个很标准的Windows窗口程序。而在VC中编写同样的程序,要花很长时间才能做到。控件的使用使得BCB下的编程就象搭积木一样,显得无比的快捷。 但是,使用积木的坏处是,如果恰好没有你所需要的积木怎么办。你是等待别人再造一块积木卖给你,还是自己想办法做一块。如果要自己做一块,那么这个积木要达到怎样的要求,才能和别的积木无缝隙的拼合在一起呢。使用BCB编程,到了一定阶段,就会出现缺少合意的控件的问题。这个时候,就逼迫程序员深入了解操作系统和控件的各个方面,才能最终做出自己想要的东西。否则,程序员始终只是个搭积木的小孩,等待现成的积木。 这一点上,对于程序员,无论是使用VC还是BCB,最后所有有关的知识都必须要掌握。只是使用VC的话,一开始就要掌握他们,使得上手很困难。而BCB则是在你编写了一段时间以后,再要求你掌握。如果说BCB是预制板顺次堆叠式编程的话,VC就是钢筋混凝土一次浇注式的,不论哪种方式,最后还是要用水泥把缝隙填起来。 BCB在数据库操作上同样具有杰出性能。现代大型程序,往往要在后台连接数据库操作数据。这个任务对于VC来说,几乎是噩梦一般。但在BCB那里,这简直是小菜一碟。丰富的控件库和强大的数据库能力使得BCB成为商用程序开发的首选。 同时,按照较公正的评测,Borland的编译器的编译速度几乎是业界最快的,优化程度也相当的好。这一点,VC要略逊一筹。 但BCB并不是没有弱点。第一个可怕的弱点就是,BCB并不象VC那样稳定,尤其是在调试时,BCB往往会无故跳出,而相比之下,VC很少有这种情况出现。对此,我宁可相信是微软在给Borland关于Windows的资料时留了一手。第二个弱点就比较难以原谅,BCB各版本之间的兼容性不好。VC1.0创建的工程,拿到VC6.0里照样可以顺利编译。但即使是BCB5.0的工程,拿到BCB6.0里编译,也会提示存在一大堆的错误。这一点,往好了想,也可以认为是BCB每个版本之间的变化程度比较大,就是BCB进步的比较快。但对于有很多老项目积存的公司,这是比较不利的。第三点,没有实质上的影响,只是会让人感觉不舒服。VCL其实不是用C++编写的,它使用Borland的另一种招牌语言pascal编写的。Borland有一款和BCB同样优秀的pascal语言的编译器,Delphi,它可以说是BCB的大哥。VCL其实是Delphi的控件库,被BCB直接拿过来了。 所以,如果你需要快速方便的编写普通界面的程序,或者需要挂接各种数据库,同时你没有太多的老项目需要重做的话,那么BCB是你的不二选择。至于和VC比,那是个人的喜好了。 Borland C++Builder Command Line 上面提到的所有编译器都是商业的,要花钱购买的。如果您正在使用,请注意版权问题。但是,下面将要提到的是一款完全免费的编译器,他就是Borland C++Builder Command Line,BCB命令行编译版。 我们已经知道BCB是一套集成开发环境,由很多工具和程序组成,是要钱的,VC也是一样。但是慷慨的Borland考虑到程序员们的需要(你要知道,在Borland 集中了世界上最杰出的程序员),把BCB的编译器部分单独取出,构成一个完整的工具,免费提供给广大用户,这就是BCB命令行编译版,可以简称为BCB CL。BCB CL是以BCB5.5为基础的,其实他就是BCB5.5的编译器部分。所以呢,BCB CL没有窗口界面,也没有VCL控件库,但是有标准函数库和标准类库,只有编译的功能。要使用它,只能在命令行,所以被称为命令行编译版。它可以在Borland的主页上找到下载,文件8.7m,安装好以后是65.9m,1438个文件。 知道这些就可以了,免费的,只能在命令行编译,可以下载。 VC的命令行编译版 其实VC没有正式的所谓命令行编译版,VC和BCB一样,本身支持命令行编译,但微软并没有推出类似BCB那样的简化无窗口的纯粹命令行编译版本。微软没有做,黑客们做了,仿照BCB的思路,把需要的部分提取出来,做成一个单独的工具,就是命令行版VC。这个东西十分好用,占空间也比较小,只有一个问题,这是个非法程序。有需要的人可以到线上自己找。 接下来是GCC 提到GCC,就不得不提到GNU,然后就要提到开放源代码运动,然后就要追溯到UNIX社区和黑客精神。如果都细细的讲一遍的话,那这就不是C++之旅,而是 GNU 演义了。所以我只想大概提一下,具体的来龙去脉,大家还是自己到论坛去看故事吧。 话说,很久很久以前,在那哺乳动物还没有出现,恐龙统治地球的时代。厄,错了。是pc还没有出现,大型机统治地球的时代,主流的操作系统是???,我说了你也不知道。那时,软件是免费的自由的可以广泛的复制传播的,那是黑客们自由自在活动的时代。后来,UNIX出现了,pc出现了,windows出现了。众多的软件厂商出现了,他们为他们的软件收费,大公司依靠软件赚取高额利润。软件被垄断在大公司手中,源代码不再公开,学习是不可能的,修改软件更是不允许的,软件不再可以自由传播,复制软件是非法的。 充满自由开拓精神的黑客们怎能容忍这样的事发生,于是,1984年,黑客Richard Stallman,创建了自由软件的概念。自由软件其主要内涵就是用户可以自由运行软件,可以按自己的要求自由修改软件,用户也可以自己销售软件,不管是收费的还是免费的。自由软件与出售软件拷贝并不冲突。这个理念被广泛的接受,并形成了一种在提供程序的同时提供源代码的惯例,这就是通常所说的开放源代码运动。 开放计算机的基础是操作系统。只有存在有一个"完全自由"的操作系统,才能够拥有自由的软件。因此,Richard Stallman开始尝试写一个能够与Unix兼容的,可以自由移植的操作系统。这个项目被命名为GNU。它是GNU is Not Unix的递归缩写。计算机操作系统不仅仅有一个内核。它是一系列软件的合集。包括内核,编译器,编辑器,调试器等等。GNU项目中,经过很多人的努力,构件了完整的优秀的编辑器,编译器和许多优秀的软件。GNU项目中的那个编译器,就是GCC(GNU Compiler Collection GNU编译器集合)。GCC是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。他可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30%。而且,他并不仅仅是一款C语言的编译器,他是很多语言的编译器的集合,支持C、C++、lisp、object C等等很多甚至不知名的语言。 由于GCC最早是为UNIX平台开发的,所以GCC的基本操作方式是命令行,这一点和BCB CL很相似。经过黑客们的努力,GCC已经移植到windows上,可以在Windows的任意一个版本下使用,不过仍然是命令行版的。为什么没有IDE(集成开发环境)呢,黑客的解释是,我们可以另外开发一个程序来提供集成环境,他不提供编译能力,让GCC来编译。这样,两个程序可以各自完成自己的工作,各自做到最好。基于这样的理念,在UNIX下通常人们使用Emacs等等文本编辑器。而在windows下,有好几款IDE,其中比较有名的一款(也是我比较熟悉的),叫 Dev-C++ 。使用Dev-C++配合GCC进行开发,也具有不错的效率。当然,在某些辅助功能,比如说自动完成方面,没有VC、BCB这种工具做的好,但如果再附加使用第三方的增强工具,不仅弥补了缺陷,还能有不小的超越,就象在传奇利用了外挂,结果比GM还要牛叉。 C++的编译器真的是很多,以下是一个收集的编译器列表,参考《C++编译器推荐目录》一文,原作者:Bjarne Stroustrup (C++之父),译者:陈希,译者Blog:http://blog.csdn.net/sunwhite 可以免费下载的编译器(在试图进行商业使用时,请检查它的许可情况): Apple C++ - 可以从开发者工具光盘中的OS X中获得,这毫无疑问是MAC机上用的 Bloodshed Dev-C++ - 基于GCC的(Mingw)IDE环境,讲过了。 Borland C++ 讲过了,这是指的命令行版。 Cygwin (GNU C++) MINGW - "Minimalist GNU for Windows".·····Windows版本的另外一个GCC编译器,包含了免费的w32api(非GPL许可) DJ Delorie's C++······development system for DOS/Windows (GNU C++) GNU CC source Intel C++ for linux·······这要多讲几句,这是Intel的编译器,按理说,他应该是最能发挥Intel的x86系列芯片性能的编译器,谁能比Intel更熟悉80X86的芯片呢。如果Borland能和Intel合作的话,说不定会有PC上最好的编译器出现。 需要付费的编译器(有些允许有评估期的免费下载): Borland C++······TC,BC和BCB系列 Comeau C++·······支持多平台 Compaq C++ Digital Mars C++ Edison Design Group C++ Front End ·····被许多C++编译器厂商采用 Green Hills C++·····支持嵌入式系统平台 HP C++ IBM C++ Intel C++·····支持Windows, Linux, 和其他嵌入式系统 Interstron C++ Metrowerks C++ - 支持多平台,可从Metrowerks主页上查询 Mentor Graphics/Microtec Research C++····支持嵌入式系统平台 Microsoft C++ Paradigm C++····支持x86嵌入式系统 The Portland Group C++····针对奔腾CPU优化 SGI C++····优化的编译器 Sun C++ WindRiver's Diab C++····用于很多嵌入式系统 作者在文中还提到了一个小程序,用于检验你所选择的C++编译器对语法和标准库的支持情况,程序如下: #include #include using namespace std; int main() { string s; cout << "Please enter your first name followed by a newline/n"; cin >> s; cout << "Hello, " << s << '/n'; return 0; // this return statement isn't necessary } 我会在将来的章节里告诉你怎么用这个程序来检验,现在,让我们结束对编译器的介绍吧。 最后,要提醒大家一点,不论是VC、BCB、GCC还是别的编译器,他们的不同仅仅在于提供了不同封装方式的类库、不同的操作界面和对代码的不同优化方式。选择某种编译器,最终的选择权可能不在你我的手中,很多时候是平台或其他因素的限制而导致你必须使用某种编译器。真正关键的问题是C++。 关于项目的某些假设 为了讨论方便,我需要对你的源文件在机器上保存的位置作出假设。如果你使用微软的DOS和Windows系列操作系统,我假设你的源文件全都存放在E:/cppcode目录下。如果你使用Linux、FreeBSD、Solias这些UNIX系统,我假设你是名叫develop的用户,源文件存放在/home/develop/cppcode目录下。如果需要名为ProjXX的项目,他被存放在E:/cppcode或/home/develop/cppcode/ProjXX内。 如果你的项目位置,项目名称,文件名称与我的假设不同,在后续某些提到目录位置的操作中,请相应修改。 总结 ok,让我们的朋友王二来讨论一下这些概念。 有一天,王二需要用电脑来做事,这叫开始。 王二决定用电脑来做,这叫计算机。 王二打开电源,摸摸机箱,这叫硬件。 王二发现自己的机器里有很多可以执行的东西,可以完成很多事,这叫程序。 除此之外还有很多数据,这些都叫文档。 程序和文档合在一起,就叫软件。 王二发现想做的事没有现成的程序, 于是他决定自己制作,这就叫开发。 王二确定自己的机器是pc机,这叫硬件基础。 王二还注意到自己用的是windows,这叫操作系统。 两个东西合在一起,等着王二的操作,这就叫平台。 王二懂得如何编程,他想使用C++,这叫编程语言。 王二打开写字板程序,开始打字,这叫编码。 打好的字整齐的显示在屏幕上,这叫源代码。 王二写好了源代码,打算把她变成程序,这个过程叫编译。 编译需要工具,这叫编译器。 王二选了一个windows下最常用的C++编译器,他叫VC。 编译出现了问题,可能是语法错误,,也可能是逻辑错误,这叫编译未通过。 王二反复地修改源代码,终于产生了程序,这叫编译通过。 王二运行程序,达到了想要的功能,这叫开发成功 王二运行程序,觉得不错,想让更多的人来用这个程序,这叫软件发布。 如果王二要求每个取得这套软件的人都要交钱,这叫商业软件。 如果王二允许大家先尝后买,这叫共享软件。 如果王二把程序白送给大家,这叫免费软件。 如果王二不止程序白送,还把源代码送给大家,这叫开源软件。 软件用了一段时间,王二想要给软件加入新的功能,或者修正软件的错误,这叫升级。 可以用两种方式给已安装的程序升级,一种是重装一个新的,这叫全新安装。 还有一种是运行另一个程序,它可以升级原有程序,这叫用升级包升级。 专门修正错误的升级包没有带来功能的增加,叫做补丁。 王二在开发的时候就把程序放出来,让大家帮忙查错,这叫测试。 测试的人是一个公司的,这叫内测。 不认识的人也来测试,这叫外测。 所有这一切,叫做编程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值