1
C/C ++程序设计
1.2.11.1 11.1 C++概述

11.1 C++概述

11.1.1 C++诞生和发展

在C的基础上,1983年由贝尔实验室的Bjarne Stroustrup推出了C++。C++进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。C++提出了更为深入的面向对象的概念,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法,在解决开发大型项目问题上取得了举世瞩目的成就。如今,C++已经深入到诸多领域,得到了全面的发展。

11.1.2 C++和C的关系

C++和C有着极为密切的关系。简言之,C++是带类的C,它增加了基于对象、面向对象、通用模版编程和STL库等。两者在基本语法上极为相似,但也有着很多的不同。在某种程度上可以说C是C++的一个子集。因为在很多场合可以将C语言编写的程序原封不动的搬到C++平台之中进行顺利的编译、链接和运行。本节重点内容放在了两者的区别上。

C是结构化语言,其重点在于算法和数据结构。设计C程序首要考虑的是如何通过一个过程,对输入进行运算处理得到输出。而对于C++,首要考虑的是如何构造一个和问题对应的对象模型,这样就可以通过获取对象的状态信息得到输出或实现过程控制。所以C与C++的最大区别在于它们用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“设计”这个概念已经被融入C++之中,而就语言本身而言,在C中更多的是算法的概念。

从语法角度,C++相对于C而言,引入了重载、内联函数、异常处理等概念。C++更是拓展了面向对象程序设计的内容,如类、继承、虚函数、模板等。

关于C和C++的学习,给大家分享一些学习的心得:

(1)基本概念很重要。无论是学C,还是学C++,基本概念都是第一位的,也是比较困难的,但只有把握了基本概念才能把握整体脉络。

(2)C是C++的子集,它的基本概念和设计方法相对比较容易理解,当掌握了C语言以后再学习C++将会感到轻松得多。

(3)如果要学好C++,建议不要编写基于窗体的程序,因为目前流行的平台大都可以轻易地生成自动化代码,塑造出一个千篇一律的模式,封装了大量的窗体实现机制,约束了学习的自由性,而初学者在面对这些代码时常常会感到手足无措。因而建议最好创建控制台程序,这样就省去了很多不必要的麻烦,可以很好地把握和理解C++语言。

(4)不要妄想速成,必须一步一个脚印地学习,尽量搞清楚每一个问题。多加练习,通过实践检验、巩固和提高所学习的理论知识。

11.1.3 面向对象程序设计

本节讨论一下面向对象程序设计的基本概念,为C++程序设计做好准备工作。

(1)面向对象程序设计的基本概念

C语言是面向过程的,通过前面的学习,我们可以看出,C语言解决问题是将客观事物分解成人为的过程,再编制出程序,这就增加了出错的可能性,尤其在开发大规模系统的过程中,开发者面临的压力是难以预计的。为了解决这种不合理现象,必须使用一种与人们认识客观事物的过程相一致的方法,这就是面向对象的方法。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、数据封装、多态性、消息传递等。

①对象

在现实世界中客观存在的事物都被称为对象。对象是构成现实世界的独立个体,而且简单的对象可以构成复杂的对象。如果通过面向对象的分析方法,从面临的问题中抽象出若干个独立个体,就构成了面向对象程序设计方法学中的对象,就是我们这里提到的对象。用属性描述对象的静态特征,用方法描述对象的动态特征。

②类

类是具有相同类型的对象的集合,从对象抽象出来的一种抽象描述。一个对象所包含的所有属性和方法可以通过类来构造。

③封装

封装是将属性和方法捆绑到一起,实现了对象的独立自治。对象并不希望外界随意地改动它的属性,而是希望通过对象自己提供的方式进行属性的访问。简言之就是“属性私有,方法公开”,对象通过权限控制机制对自己的属性进行保护。

④继承

继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用,还可以实现自己的新特性。继承的引入大大地提高了程序开发的效率。

⑤多态

多态是指对于同一个消息不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。

⑥动态绑定

绑定指的是将一个过程调用与相应代码链接起来的行为。如果这种绑定只有在运行期才能确定的话就称之为动态绑定,它是多态实现的一种形式。

⑦消息传递

面向对象的思想源自于我们人的思维方式,即源于现实世界。众所周知,对象之间需要相互沟通,沟通的途径就是消息传递。消息内容包括接收消息的对象的标识、需要调用的函数的标识以及必要的信息。

(2)面向对象的主要特征

①封装性:封装是一种信息隐蔽技术,其目的在于把对象的设计者和对象的使用者分开,使用者不必知晓行为实现的细节,只需用设计者提供的消息来访问该对象。对于设计者而言,只需考虑对象的设计,至于何时用、如何用等问题是不需要考虑也是无法考虑的;对于使用者而言,只需了解对象的属性和方法的特性,以及何时使用和怎样使用,具体的实现细节可以完全不予考虑。

②继承性:继承性使得子类可以根据继承性机制在一定程度上共享父类的属性和方法,同时可以修改和扩充。如果没有继承性机制,则类对象中数据、方法就会出现大量重复。继承分为单一继承(一个子类只有一个父类)和多重继承(一个类有多个父类)。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。继承具有传递性。

③多态性:对象根据所接收的消息而做出动作。同一消息被不同的对象接收时可产生完全不同的行为,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接收消息的对象自行决定,由此同一消息即可调用不同的方法。多态性的实现受到继承性的支持,在面向对象程序设计语言中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。