C++ - C 语言之增强编译型 面向对象的跨平台高级编程语言 C++ 是在 C 语言基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式 ── 面向对象编程、泛型编程和过程化编程。C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。 C++ 支持类:类、封装、重载等特性!C++ 编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一。 1983 年 C++ 这个名字由 Rick Mascitti 于提出建议,于1983 年 12 月首次使用。1983 年之前,尚处于研究阶段曾被称为 “new C”,之后改为 “C with Class”。在计算机科学中,C++ 仍被称为 C 语言的上层结构。它最后得名于 C 语言中的 “++” 操作符(其对变量的值进行递增)。在共同的命名约定中,使用 “+” 以表示增强的程序。Stroustrup 说:“这个名字象征着源自于 C 语言变化的自然演进”。 1992 年 Rick Mascitti 在被非正式地问起名字的由来时,他表示这是在半开玩笑中说出的。他从没想过 C++ 会成为这门语言的正式名字。有一个关于 C++ 名字的笑话,当你使用后缀 ++ 时,赋值发生在加运算之后(因此,它应该是 ++C,而不是 C++,这个笑话是说时下某些程序员还在以使用 C 的方式使用 C++,这通常被一些权威著作认为是不正确的)。 注意:C+ 是一个和 C/C++ 无关的早期编程语言。 计算机诞生初期,人们要使用计算机必须用机器语言或汇编语言编写程序。世界上第一种计算机高级语言是诞生于 1954 年的 FORTRAN 语言。之后出现了多种计算机高级语言,其中使用最广泛、影响最大的当推 BASIC 语言和 C 语言。 10 倍以上效率提升 智能GUI文档翻译 Python Qt/C++ HTML5 网站站群 "数字 IDE 专业版" 开发工具 http://forum.digitser.cn/thread-2184-1-1.html 百度网盘 https://pan.baidu.com/s/1jIzOgzs 软件仓库 https://digitser.sourceforge.io/ https://pan.baidu.com/s/1TV70__Be1ta0ney1-tudFQ BASIC 语言是1964 年由 Dartmouth 学院 John G. Kemeny 与 Thomas E. Kurtz 两位教授在 FORTRAN 语言的基础上简化而成的,适用于初学者设计的小型高级语言;C 语言是 1972 年由美国贝尔实验室的 Dennis M. Ritchie 所开发,采用结构化编程方法,遵从自顶向下的原则。在操作系统和系统使用程序及需要对硬件进行操作的场合,用 C 语言明显优于其它高级语言,但在编写大型程序时,C 语言仍面临着挑战。 1983 年贝尔实验室的 Bjarne Stroustrup 在 C 语言基础上推出了 C++。 在 “C with Class” 阶段,研制者在 C 语言的基础上加进去的特征主要有:类及派生类、共有和私有成员的区分、类的构造函数和析构函数、友元、内联函数、赋值运算符的重载等。 1985 年公布的 C++ 语言 1.0 版的内容中,又添加了一些重要特征:虚函数的概念、函数和运算符重载、引用、常量(constant)等。 1989 年推出的 2.0 版形成了更加完善的,支持面向对象程序设计的 C++ 语言,新增加的内容包括:类保护成员、多重继承、对象初始化与赋值递归机制、抽象类、静态成员函数、const 成员函数等。 1993 年的 C++ 语言 3.0 版本是 C++ 语言的进一步完善,其中最重要的新特征是:模板(template);此外,还解决了多重继承产生的二义性问题及对构造函数与析构函数的处理等。 1998 年 C++ 标准(ISO/IEC 14882 Standard for the C++ Programming Language)得到了国际标准化组织(ISO)和美国标准化协会(ANSI)的批准,标准 C++ 语言及其标准库更体现了 C++ 语言设计的初衷。名字空间的概念、标准模板库(STL)中增加的标准容器类、通用算法类和字符串类型等使得 C++ 语言更为实用。此后 C++ 是具有国际标准的编程语言,该标准通常简称 ANSI C++ 或 ISO C++ 98 标准,以后每 5 年视实际需要更新一次标准。 2003 年通过了 C++ 标准第二版(ISO/IEC 14882:2003):这个新版本是一次技术性修订,对第一版进行了整理 —— 修订错误、减少多义性等,但没有改变语言特性。这个版本常被称为 C++ 03。 此后,新标准草案叫做 C++ 0x。对于 C++ 0x 标准草案的最终国际投票已于 2011 年 8 月 10 日结束,且所有国家都投出了赞成票,C++ 0x 已毫无异议地成为正式国际标准。先前被临时命名为 C++ 0x 的新标准正式定名为 ISO/IEC 14882:2011,简称 ISO C++ 11 标准。C++ 11 标准将取代现行的 C++ 标准 C++ 98 和 C++ 03。 2011 年 09 月 01 日国际标准化组织出版发布《ISO/IEC 14882:2011》,名称是:Information technology -- Programming languages -- C++ Edition: 3,常被称为 C++ 11。 2014 年 08 月 18 日国际标准化组织出版发布《ISO/IEC 14882:2014》,名称是:Information technology -- Programming languages -- C++ Edition: 4,常被称为 C++ 14。 C 语言是 C++ 的基础,C++ 和 C 语言在很多方面是兼容的。C 语言是一种结构化语言,它的重点在于算法与数据结构。C 程序的设计首要考虑的是:如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 过程/事物 控制)。C++ 程序首要考虑的是:如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可通过获取对象的状态信息,得到输出或实现 过程/事物 控制。 所以,C 语言和 C++ 的最大区别在于:它们解决问题的思想方法是不一样的。 C++ 对 C 的 “增强” 表现在 6 方面: 01、类型检查更为严格; 02、增加了面向对象的机制; 03、增加了泛型编程的机制(Template); 04、增加了异常处理; 05、增加了运算符重载; 06、增加了标准模板库(STL)。 C++ 一般被认为是 C 语言的超集(Superset),但这并不严谨。大部分的 C 语言代码可轻易在 C++ 中正确编译,但仍有少数差异,导致某些有效 C 语言代码在 C++ 中失效,或者在 C++ 中有不同的行为。最常见的差异之一是,C 语言允许从 void* 隐式转换到其它的指针类型,但 C++ 不允许。以下是有效 C 语言代码: //从 void* 要使以上代码,在 C 语言和 C++ 两者间皆可运作,就需要使用以下显式转换: int*i=(int*)malloc(sizeof(int)*5); 另一个常见可移植问题是:C++ 定义了新关键字,譬如:new、class,它们在 C 语言程序中是可作为识别字(比如:变量名)的。 C 语言标准 C99 去除了一些不兼容处,支持了一些 C++ 特性,譬如:// 注解、及在代码中混合声明。不过,C 语言标准 C99 也纳入几个和 C++ 冲突的新特性(比如:可变长度数组、原生复数类型和复合逐字常数)。 若要混用 C 语言和 C++ 的代码,则所有在 C++ 中调用的 C 代码,必须放在 extern "C" { /* C 代码 */ } 内。 争议 “在这 12 年里,C++ 用户人数大约每 7 个月半增加一倍”,是许多 C++ 相关文件必引的一段话;然而,时至今日新语言层出不穷,用户人数已不太可能以如此速度增长。 分析机构 EvansData 定期对开发人员展开调查,其数据显示,以 C++ 为工具的开发人员在整个开发界所占的比例由 1998 年春天的 76% 下降至 2004 年秋的 46%。 Forrester 最新调查显示,C++、微软 Visual Basic 和 Java 是众多公司产品体系的首选语言。对 100 家公司的调查显示,C/C++、Visual Basic 和 Java 在产品体系中的使用比例分别是 59%、61% 和 66%。 一部分 Unix/C 程序员对 C++ 语言深恶痛绝,他们批评的理由如下: 01、STL 以非常丑陋的方式封装了各种数据结构和算法,写出来的代码难以理解、不美观; 02、C++ 编译器复杂和不可靠,不适合构建人命关天类型的程序; 03、一部分人认为面向对象技术徒增学习成本,不如面向过程的 C 语言简单容易使用,尤其是在系统软件的构建上。 概括说来,UNIX 程序员批评 C++ 主要是由于 UNIX 社区与 C++ 社区的文化差异。一个值得注意的事情,是 Linux 之父 Linus Torvalds 曾经炮轰 C++;图灵奖得主尼克劳斯·维尔特也曾经批评 C++ 语言太复杂、语法语义模糊,是 “拙劣工程学” 的成果。 事实上,对于 C++ 语言的批评并不只来源于 Unix/Unix-Like 系统下的程序员。就像 C++ 语言本身是一个跨平台的语言一样,对 C++ 的批评并不局限于 Unix/Unix-Like 系统用户。 一个确定的观点是:C++ 是一门复杂的语言、这门语言拥有过多的特性从而难以彻底掌握;C++ 的某些库难以学习、掌握并应用于实际当中;很多程序员都认为 C++ 是一个过度设计的程序语言。 |