2.1 结构的演化
类是从结构演变而来的,开始称为“带类的C”。这种演变就是从让结构含有函数开始的。
2.1.1 结构发生质的演变
1.函数与数据共享
2.封装性
2.1.2 使用构造函数初始化结构对象
2.2 从结构演变一个简单的类
2.3 面向过程与面向对象
所谓“面向过程”,就是不必了解计算机的内部逻辑,而把精力主要集中在对如何求解问题的算法和过程的描述上,通过编写程序把解决问题的步骤告诉计算机。
所谓函数,就是模块的基本单位,是对处理问题的一种抽象。
结构化程序设计使用的是功能抽象,面向对象程序设计不仅能进行功能抽象,而且能进行数据抽象。“对象”实际上是功能抽象和数据抽象的统一。
面向对象的程序设计方法不是以函数过程和数据结构为中心,而是以对象代表求解问题的中心环节。他最求的是现实问题空间与软件系统解空间的近似和直接模拟。
软件开发是对给定问题求解的过程。从认识论的角度看,可以归为两项主要的活动:认识与描述。
软件开发者将被开发的整个业务范围称作“问题域”(problem domain),“认识”就是在所要处理的问题域范围内,通过人的思维,对该问题域客观存在的事物以及对所要解决的问题产生正确的认识和理解,包括弄清事物的属性,行为及其彼此之间的关系并找出解决问题的方法。
“描述”是指用一种语言把人们对问题域中事物的认识、对问题及其解决方法的认识描述出来。最终的描述必须使用一种能够被机器读得懂的语言,即编程语言。
2.4 C++面向对象程序设计的特点
和传统的程序设计方法相比,面向对象的程序设计具有抽象、封装、继承和多态性等关键要素。
2.4.1 对象
C++可使用对象名、属性和操作三要素来描述对象。
2.4.2 抽象和类
抽象是一种从一般的观点看待事物的方法,即集中于事物的本质特征,而不是具体细节或具体实现。
类的概念来自于人们认识自然、认识社会的过程。在这一过程中,人们主要使用由特殊到一般的归纳法和由一般到特殊的演绎法。在归纳的过程中,是从一个个具体的事物中把共同的特征抽取出来,形成一个一般的概念,这就是“归类”;在演绎的过程中,把同类事物,根据不同的特征分成不同的小类,这就是“分类”。对于一个具体的类,它有许多具体的个体,这些个体叫做“对象”。
类的作用是定义对象。
所谓“一个类的所有对象具有相同的属性”,是指属性的个数、名称、数据类型相同,各个对象的属性值则可以互不相同,并且随着程序的执行而变化。
2.4.3 封装
将类封装起来,也是为了保护类的安全。所谓安全,就是限制使用类的属性和操作。
对象内部数据结构这种不可访问性称为信息(数据)隐藏。
封装就是把对象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。
在类中,封装是通过存取权限实现的。
2.4.4 继承
继承是一个类可以获得另一个类的特性的机制,继承支持层次概念。
通过继承,低层的类只须定义特定于它的特征,而共享高层的类中的特征。
2.4.5 多态性
不同的对象可以调用相同名称的函数,但可导致完全不同的行为的现象称为多态性。
2.5 使用类和对象
2.5.1 使用string对象
所谓方法,书就是供这类对象使用的成员函数。对象使用自己的成员函数的方法是通过“.”运算符,格式如下:
对象名.成员函数
2.5.2 使用string类的典型成员函数实例
2.5.3 使用complex对象
C++标准程序库提供complex类定义复数对象。
2.5.4 使用对象小结
注意:类是抽象出一类物质的共同特征,模板则是归纳出不同类型事物的共同操作。
2.6 string对象数组与泛型算法