学C++有什么用?
C++【编辑此段】C++概述c++这个词在中国大陆的程序员圈子里通常读作“C Gaga”,而西方程序员通常读作“C plus plus”和“CPP”。它是一种广泛使用的计算机编程语言。C++是一种通用编程语言,它检查静态数据类型并支持多种编程范式。它支持过程化编程、数据抽象、面向对象编程、制作图标和其他通用编程风格。
C++的发展历史简介
C语言之所以要命名为“C”,是因为它主要指的是当时一种叫B的语言,它的设计者认为C语言是B语言的进步,所以命名为C语言;但B语并不是因为之前有A语,而是因为B语的作者纪念他的妻子,他的第一个字母是B;在C语言发展的巅峰时期,出现了一个叫C with class的版本,这是C++最早的版本。当时很多版本的C都想在C语言中加入类的概念。后来,C标准委员会决定给这个版本的C取一个新名字。当时征集了很多名字,最后采纳了其中一个。用C语言中的++运算符来表示是C语言的进步,所以叫C++,成立了C++标准委员会。
美国电话电报公司。贝尔实验室的比雅尼·斯特劳斯特鲁普博士在20世纪80年代早期发明并实现了C++(最初称为“带类的C”)。当初C++是作为C语言的增强版出现的。自从C语言增加了类之后,新的特性就不断增加。虚函数、运算符重载、多重继承、模板、异常、RTTI和命名空间逐渐被加入到标准中。1998国际标准组织(ISO)发布了C++编程语言国际标准ISO/IEC 1488-1998。C++是一种具有国际标准的编程语言,通常称为ANSI/ISO C++。1998是C++标准委员会成立的第一年,标准会根据实际需要每五年更新一次。下一次标准更新将在2009年。目前我们一般称标准C++为0x。遗憾的是,由于C++语言的复杂性及其长期演变,直到现在(2009年),只有Visual C++ 2010 CTP开发环境的编译器完全符合这一标准。
另外,就学习C++而言,可以认为是一门独立的语言。他不依赖C语言。我们完全不用学C语言就可以直接学习C++。按照《C++中的思维》这本书的说法,C++和C的效率差往往在正负5%之间。所以有人认为C++在大多数场合完全可以替代C语言(但是在需要谨慎使用空间和直接操作硬件的地方,比如单片机,我们还是需要使用C语言)。【编辑本段】子语言根据《有效C++第三版》第一句中的描述,现在C++由以下四种“子语言”组成:
1,C子语言。C++支持C语言几乎所有的功能,只是在语法上和C语言略有不同(比如括号表达式的左右值,具体请参考C++标准文献)。
2.面向对象的C++。C++最早是作为面向对象的语言而为人所知的,这里不详细介绍这个特性。
3.通用编程语言。C++强大的(但容易失控的)模板功能使其能够在编译时完成大量工作,从而大大提高了运行时的效率。
4.STL(C++标准模板库)。随着STL的不断发展,它逐渐成为C++编程中不可或缺的一部分,其效率可能低于普通的朴素代码,但其安全性和标准化使其广受欢迎。【编辑此段】语言发展C++语言发展大致可以分为三个阶段:第一个阶段是80年代到1995。现阶段,C++语言基本上是传统的面向对象语言,以接近C语言的效率,在业界使用的开发语言中占据了相当大的份额。第二阶段是1995到2000。在这个阶段,由于标准模板库(STL)和后来Boost库的出现,泛型编程在C++中占据了越来越大的比重。当然,与此同时,由于Java、C#等语言的出现以及硬件价格的大规模下降,C++受到了一定的冲击;第三阶段,从2000年开始,由于以Loki、MPL等库为代表的产生式编程和模板元编程的出现,C++达到了发展史上的一个新的高峰。这些新技术的出现以及它们与原有技术的融合,使得C++成为主流编程语言中最复杂的成员。【编辑此段】C++入门c++是一门语言,它的语法、特性、标准类库都已经是很高级的课程了,所以当你开始学习的时候,首先要打好基础。市面上有很多关于Visual C++的书籍。虽然介绍C++的基本特性可能需要1-2章,但绝对不会让你入门。所以初学者应该选择C++语言本身的书,而不是Visual C++、MFC或者Windows API的书。
学习C++应该由易到难,循序渐进。以前都说先学C再学C++。事实上,没这个必要。C++和C虽然有关联,但还是两种不同的语言。当然,在学习C++之前学习其他编程语言是非常有益的。那会让学习C++更快。毕竟计算机语言的很多概念是相通的。对于零基础的新手来说,要静下心来,不要急躁。想成为C++的高手不是那么容易的,需要付出很多努力。
从入门教材的选择来说,主要看学习者自身的情况。如果你有学习高级语言的经验,推荐谭浩强的C++编程。注意是2004年出版的,2006年出版的书被阉割了,上来就是面向对象的。虽然C和C++差不多,但是前面也提到过,C和C++应该是作为两种语言来学习的,所以2006年的书内容略显欠缺。谭浩强的04版这本书很有规律,组织得很好。如果你有其他高级语言的基础,估计半年就能对C++有个大概的了解。谭浩强老师的书已经成为全国各大高校的教材,是比较认可的。
如果你是从零开始学C++,那么推荐潘家杰的易学C++。这本书出版于2008年。听说是一个学生读书的时候写的。这本书有免费的电子版可以在线下载。。这本书主要针对初学者,也生动有趣,可以提高学习兴趣。所以,对于没有基础的初学者来说,选择这本书是有好处的,即使想很快成为大师,读这本书也未必够。
至于看入门书,应该看一些进阶书。比如C++编程语言和C++初级也可以向STL、MFC、API等方向发展。如果你对其他语言感兴趣,也可以看看C#和Java,它们在语法和很多概念上都和C++差不多。[编辑此段]C+++的设计原则?6?1 C++设计为静态多用途编程语言,和C一样高效可移植。
6?1 C++旨在直接且广泛地支持各种编程风格(编程式编程、数据抽象、面向对象编程、泛型编程)。
6?1 C++旨在给程序员更多的选择,即使可能导致程序员的错误选择。
6?1 C++旨在尽可能与C兼容,从而提供从C到C++的平滑过渡。
6?1 C++避免了平台限制或无通用性的特点。
6?1 C++不使用会带来额外开销的特性。
6?1 C++的设计没有复杂的编程环境。
为了保持语言的简洁和高效运行,C++的很多特性都是以库(比如STL)或者其他形式提供的,并没有直接添加到语言本身。关于这类话题,C++之父在《C++语言的设计与进化》中做了详细的陈述。【编辑本段】C++ Hello World程序当使用兼容C89标准(也称为ANSI C)的编译器时,下面的程序显示“Hello,World!”然后结束操作:
(其实这并不是一个符合98标准[ISO C++]的C++程序,在大部分编译器上都无法运行。如果你想在旧的编译器上编译这个程序,你应该把iostream改成iostream.h)
# include & ltiostream & gt
int main()
{
printf("你好,世界!\ n ");
返回0;
}
当使用与C++98标准(ISO/IEC 14882-1998)兼容的编译器时,以下过程也是可能的:
# include & ltiostream.h & gt
int main()
{
cout & lt& lt“你好,世界!”& lt& ltendl
返回0;
}
使用与C++ STL兼容的编译器时,应该是:
# include & ltiostream & gt
使用命名空间std
int main()
{
cout & lt& lt“你好,世界!”& lt& ltendl
返回0;
}
根据ISO C++,主函数只能是
int main(void)
{
...
}
和
int main(int argc,char * argv[])
{
...
}
尽管如此,在Visual C++ 2003之前的Microsoft Studio编译器上,
void main()
{
...
}
也支持,但不正确也不标准。这种写法会让程序代码失去跨平台的特性。[编辑此段] EvansData是一家针对C++程序员的定量分析机构,定期对开发者进行调查,其调查结果与Stroustrup关于c++正在扩张的说法相反。根据EvansData的数据,使用C++作为工具的开发人员在整个开发行业中的比例从1998年春天的76%下降到2004年秋天的46%。
Forrester的最新调查显示,C++、Microsoft VisualBasic和Java是许多公司产品系统的首选语言。对100家公司的调查显示,产品系统中使用C/C++、VisualBasic和Java的比例分别为59%、61%和66%。
传统上,相对于目前一些新潮的语言,如Java、C#,C++的优势在于程序的运行性能。这个概念不完整。如果一个人对此深信不疑,说明他还没有完全理解和领悟C++和那种特定的语言。同时,持有这种想法的人通常会被误导(罪魁祸首当然是那些财大气粗的公司)。对于这些公司来说,他们隐藏了C++和某种语言的核心区别,强化了现在大多数程序员都不太在意的区别,那就是性能。因为随着CPU性能的快速提升,性能问题已经不再被人们所关注。这叫“李僵”。很多涉世不深的程序员都相信他们。结果大公司的阴谋得逞了。
一般来说,使用Java或C#的开发成本比C++低。但是,如果你能充分分析C++和这些语言的区别,你会发现这句话是有条件的。这个条件就是软件规模和复杂度相对较小。如果不超过30000行有效代码(不包括生成器生成的代码),这句话基本可以成立。否则随着代码量和复杂度的增加,C++的优势会越来越明显。造成这种差异的是C++的软件工程。在Java和C#谈论软件工程的时候,C++其实已经悄悄地把软件工程提到了一个前所未有的高度。这一点被大多数人忽视,被大公司试图掩盖。
软件工程中语言的好坏取决于语言的抽象能力。从面向过程到面向对象,语言的抽象能力有了质的飞跃,但在实践中,人们发现面向对象并不能解决软件工程中的所有问题。因此,精英们逐渐引入并扩展泛型编程来解决更高层次的软件工程问题。(其实面向对象和泛型编程的起源可以追溯到1967,但是泛型编程的应用远远落后于面向对象)。【编辑本段】C++语言的应用哪些程序是用C++写的:
三大主流操作系统,Windows,Linux,Unix UNIX,都是用C语言和汇编写的,上面的高级特性都是用C++写的。
几乎所有的网络游戏比如魔兽世界,百度搜索引擎(Baidu.com),我们用的大部分软件都是用C++写的(很多硬件也用C++)。
C++之父比雅尼·斯特劳斯特鲁普列举的C++应用;
亚马逊:大型电子商务软件
苹果:OS X是用混合语言编写的,但是一些重要的部分是C++。最有趣的两个是
美国电话电报公司。t:美国最大的电信提供商。
o供应系统
o故障后快速网络恢复系统
Autodesk:CAD领域的大量主流应用
爱立信:o服务器平台。
o时分多址-码分多址HLR
o GSM-TDMA-CDMA移动网关
谷歌:网络搜索引擎等.
惠普:以下是惠普C++应用的一小部分:
o C、C++、Fortran90编译器,以及用于新的HP IA64平台的链接器(这些增加了超过100万行C++代码)。
IBM: o OS/400。
o K42:一个高性能、开源、通用的操作系统内核,用于缓存一致的多处理器。
英特尔:o Vtune性能分析软件
o编译器和优化器
o大量芯片设计和制造软件
JPL(美国国家航空航天局喷气推进实验室):火星漫游车自动驾驶系统(包括场景分析和路线规划)。火星上的C++!还有许多“在地面上”(即地球)的支持软件。
微软:o视窗XP
o Windows NT (NT4和2000)
o Windows 9x (95、98、Me)
o微软办公软件(Word、Excel、Access、PowerPoint、Outlook)
o互联网浏览器(包括Outlook Express)
o Visual Studio
o SQL
Mozilla:火狐浏览器和雷鸟邮件客户端(开源)
MySQL: MySQL服务器(大约25万行C++)和MySQL集群。可以说是世界上最受欢迎的开源数据库
诺基亚:o移动通信无线电台/互联网桥:FlexiGGSN(网关GPRS支持节点)和FlexiSGSN(服务器GPRS支持节点)。
o理学硕士/HLR
sun:o HotSpot Java虚拟机是用C++写的
Symbian操作系统:基本原理:“[...]对所有系统代码使用C++,从内核开始。”这是最广泛使用的手机操作系统之一
linux的KDE是用C++写的。
电话系统:我认为列出不是用C++编写的系统会更容易