1.3 C++与面向对象程序设计
C++是从C语言发展演变而来的。它在C语言的基础上引入了类(class)的概念,并增加了封装、继承、多态等面向对象的语言处理机制。C++向前兼容了C语言程序设计,使得绝大部分C程序可以不加修改就能在C++环境下编译运行,同时提供了面向对象的程序设计机制,支持面向对象程序设计,是一种面向过程与面向对象的混合编程语言。
1.C++简史
在计算机发展的早期,操作系统之类的软件主要是用汇编语言编写的。由于汇编语言依赖于计算机硬件系统,用它编写的软件系统的可移植性和可读性都比较差。
UNIX系统最初也是用汇编语言编写的。为了提高UNIX系统的可移植性和可读性,1970年,美国AT&T贝尔实验室的Ken Thompson以BCPL(Basic Combined Programming Language)为基础,设计了非常简洁且与硬件很接近的B语言,用该语言改写了UNIX,并在PDP-7上实现了它。
B语言是一种无类型的语言,直接对机器字进行操作,过于简单,且功能不强。在1972年到1973年间,贝尔实验室的Dennis Ritchie对B语言进行了改造,添加了数据类型的概念,设计了C语言,并在1973年和Thompson用C语言重写了UNIX 90%以上的代码,这就是UNIX 5。在此之后,C语言又进行了多次改进,1975年UNIX 6发布后,C语言突出的优点引起了世人的普遍关注。1977年,不依赖于具体机器指令的、可移植的C语言出现了。
C语言简洁、灵活,具有丰富的数据类型和运算符,具有结构化的程序控制语句,支持程序直接访问计算机的物理地址,具有高级语言和汇编语言的双重特点。1978年以后,C语言已先后被移植到了大、中、小及微型计算机上。伴随着UNIX系统在各种类型的计算机上的实现和普及,C语言逐渐成了最受欢迎的程序设计语言之一。
但是C语言本身也存在一些缺陷,类型检查机制较弱,缺乏支持代码重用的语言结构,不适合大型软件系统的开发设计,当程序规模大到一定程度时,就很难控制程序的复杂性了。
1979年,贝尔实验室的Bjarne Stroustrup借鉴了Simula(较早的一种面向对象程序设计语言)类的概念,对C语言进行了扩展和创新,将Simula的数据抽象和面向对象等思想引入了C语言中,称为“带类的C”,这就是C++的早期版本。1983年,“带类的C”正式改名为C++。
C++发明至今,主要经历了三次修订,每次修订都增加和修改了一些内容。第一次修订发生在1985年,第二次修订是1990年。为了实现C++的标准化,成立了由ANSI(American National Standards Institute,美国国家标准化协会)和ISO(International Standards Organization,国际标准化组织)参加的联合标准化委员会。该委员会于1994年提出了一个标准草案,此草案保持了Stroustrup最初定义的C++功能,并增加了一些功能。
标准草案提出之后不久出现了STL(Standard Template Library),STL是一组通用例程,它功能强大,设计精巧,但很庞大。为了将STL加入C++,拖延了C++的标准化进程。联合标准化委员会在C++的标准化过程中,陆续增加了许多新的功能,并对原有内容进行了许多修改。
联会委员会于1998年提出了C++的ANAI/ISO标准,这个比Stroustrup最初定义C++要大得多,也复杂得多,人们称此为标准C++。为了与标准C++相区别,将之前的版本称为传统C++。
当前的许多C++编译器(如Visual C++、C++ Builder)都提供了对标准C++及传统C++的支持,两种版本的C++具有许多相同的功能,有大量相同的库和函数(标准C++更多),其区分方法是头文件和命名空间。
2.C++的特点
C++保留了C语言的原有特征和优点,支持C语言程序设计。同时,C++对C语言进行了扩展,增加了面向对象的新特征和语言处理机制,支持面向对象的程序设计,是C语言的超集。概括而言,C++具有以下特点。
① 高效性。C++允许直接访问物理地址,支持直接对硬件编程和位(bit)操作,能够实现汇编语言的大部分功能,生成的目标代码质量高,程序运行效率高。C++虽然是一种高级语言,却具有低级语言的许多功能,适用于编写系统软件。
② 灵活性。C++语言可以用于许多领域,在程序中几乎可以不受限制地使用各种不同的程序设计技术,设计出各种特殊类型的程序。
③ 丰富的运算符和数据类型。C++提供了丰富的数据类型,不仅提供了int、char、bool、double、float等内置数据类型,还允许用户通过结构、类、枚举定义自定义数据类型,具有+、、、\、*、%、||、&、<<、>>、>、<、>>等丰富的运算符,支持算术运算、逻辑运算、位操作等运算。
④ 可移植性。C++语言具有较强的可移植性,程序能够比较容易地从一种类型的计算机系统中移植到另一种类型的系统中。
⑤ 支持面向对象程序设计。C++对C语言的最大改进就是融入了面向对象程序设计的思想,提供了把数据和数据操作封装在一起的抽象机制,支持类、继承、重载和多态等面向对象的程序设计,使C++在软件复用和大型软件的构造和维护等方面变得容易、高效,提高了软件开发的效率和质量。
总之,C++保留了C语言简洁、高效和接近汇编语言等特点,对C的类型系统进行了改进和扩充,比C更安全、可靠。但C++最重要、最有意义的特征是支持面向对象的程序设计。