C++编程兵书
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 C++概述

C++是一种应用较广的面向对象的程序设计语言,其除了继承了C语言全部的优点和功能外,还支持面向对象程序设计。C++现在已成为面向对象程序设计的首选语言,也是当前十分流行和实用的一种程序设计语言。

1.1.1 C++的历史沿革

读者可能了解到,C++语言起源于C语言。1980年,美国贝尔实验室的Bjarne Stroustrup博士及其同事在C语言的基础上,从Simula 67中引入面向对象的特征,开发出一种过程性与对象性相结合的程序设计语言。最初称为“带类的C”,1983年取名为C++。

后来,Stroustrup和他的同事又为C++引进了运算符重载、引用、虚函数等许多特性,使之更加精练,于1989年后推出了AT&T C++ 2.0版。随后美国国家标准化协会(American National Standard Institute,ANSI)和国际标准化组织(International Standards Organization,ISO)一起进行了标准化工作,并于1998年正式发布了C++语言的国际标准ISO/IEC:98-14882。各软件商推出的C++编译器都支持该标准,并有不同程序的拓展。

此后,C++经过了许多次改进、完善,发展成为现在的C++。目前的C++具有两方面的特点:其一,C++是C语言的超集,因此能与C语言兼容;其二,C++支持面向对象的程序设计,使其被称为一种真正意义上的面向对象程序设计语言。

C++支持面向对象的程序设计方法,特别适合于中型和大型的软件开发项目。从开发时间、费用到软件的重用性、可扩充性、可维护性和可靠性等方面,C++均具有很大的优越性。

提示:C++可以认为是C语言的一个超集,这就使得许多C代码不经修改就可被C++的编译器编译通过。

1.1.2 C++与面向对象

由于C++是一种面向对象的程序设计语言,因此具有面向对象程序设计的特点。面向对象程序设计是一种程序设计方法,其模仿了人们建立现实世界模型的方法。在面向对象程序设计中,现实世界中客观存在的事物都被称为对象,而具有相同特征的一类对象则可归纳为类。例如,张三是一个对象,而人则是一个类。面向对象程序设计的基础是对象和类。

C++中,对象是构成信息系统的基本单位,类(class)是对一组性质相同对象的描述。简单来说,类是用户定义的一种新的数据类型,是C++程序设计的核心。由于C++是一种面向对象的语言,因此,面向对象程序设计的主要特征也是C++的主要特点,具体如下。

● 封装性:所谓封装,就是将一组数据和与这组数据有关的操作集合、组装在一起,形成一个能动的实体,也就是对象。C++中通过建立类这个数据类型来支持封装性。

● 继承性:继承是指一个类具有另一个类的属性和行为。这个类既具有另一个类的全部特征,又具有自身的独有特征。C++中将其称为派生类(或子类),而将其所继承的类称为基类(父类)。

● 多态性:多态是指不同的对象调用相同名称的函数,并可导致完全不同的行为。C++中的多态性通过使用函数重载、模板和虚函数等概念来实现。

近几年来,C++得到许多扩展,使其具有更多独有的特点。C++模板是近几年来对此语言的一种扩展,模板是根据类型的参数来产生函数和类的机制,有时也称模板为“参数化的类型”。使用模板可以设计一个对许多类型数据进行操作的类,而不需要为每个类型的数据建立一个单独的类。标准模板库(Standard Tempalte Library,STL)和微软的活动模板库(Active Tempalte Library,ATL)都基于C++语言扩展,这些在后续的章节中都将逐一介绍。

此外,C++标准可分为C++语言本身和C++标准库两部分。C++标准库对于Visual C++来说是相当新的,C++标准库实现容器和算法的部分就是STL。

STL是数据结构和算法的一个框架,数据结构包括矢量、列表和映射等,算法包括这些数据结构的查找、复制和排序等。1994年7月,ANSI/ISO C++标准委员会投票决定接受STL为C++标准库的一部分,STL的产生是为了满足通用性的设计目标,而不是为了提高性能。

1.1.3 从C到C++

前面提到过,C++语言是对C语言的扩展,是C语言的超集。C++语言增强了C语言的能力,使得程序员能够提高编写程序的质量,并易于程序代码的复用。C++语言的ISO标准已在1997年11月被一致通过,于1998年8月被正式批准。

事实上,“C++”这个名字是由Rick Maseitti提出,到1983年夏被确定的。C++的创作灵感来源于当时计算机语言多方面的成果,特别是BCPL语言(它也是C语言的来源之一)和Simula 67语言(以面向对象为核心的语言),同时还借鉴了Algol 68。就如同它的名字表达的那样,C++语言是C语言的一个超集,它是一门混合型的语言,既支持传统的结构化程序设计,又支持面向对象的程序设计,这也是C++语言成功流行的一个重要原因。

注意:C语言是结构化和模块化的语言,它是面向过程的。C++保留了C语言原有的所有优点,增加了面向对象的机制。

简单来说,C++与C语言完全兼容。C++对C语言的增强和扩展,主要表现在两个方面。

● 在原来面向过程的机制基础上,对C语言的功能做了不少扩充。

● 增加了面向对象的机制。

具体来说,C++与C语言相比,其优点如下。

● 与C语言兼容,既支持面向对象的程序设计,也支持结构化的程序设计。同时,熟悉C语言的程序员,能够迅速掌握C++语言。

● 修补了C语言中的一些漏洞,提供了更好的类型检查和编译时的分析。使得程序员在C++环境下继续编写C代码,也能直接应用。

● 生成目标程序质量高,程序执行效率高。一般来说,用面向对象的C++编写的程序执行速度与C语言程序不相上下。

● 提供了异常处理机制,简化了程序的出错处理。利用throw、try和catch关键字,使出错处理程序不必与正常的代码紧密结合,提高了程序的可靠性和可读性。

● 函数可以重载。重载允许相同的函数名具有不同参数表,系统根据参数的个数和类型匹配相应的函数。

● 提供了模板机制。模板包括类模板和函数模板两种,它们将数据类型作为参数。对于具体数据类型,编译器自动生成模板类或模板函数,它提供了源代码复用的一种手段。