对象和类的概念
1.对象
将现实世界中事物的本质抽象为对象,每个对象都具有属性和方法这两方面的特征。
对象的属性描述了对象的状态也就是静态特征,可以使用变量表示,
对象的方法则说明了对象的行为也就是动态特征,这两个方面的结合构成了对该对象的完整描述,可以使用函数来实现。

2.类
具有相似属性和行为的一组对象集合在一起,就形成了类。
程序中,类是一种由用户自定义的数据类型,称为类类型,在这个数据类型中不但包含不同类型的数据,也包含了完成操作的函数。
类和对象的关系
类是对具有相同类型对象的抽象,而对象则是类的一个具体实例。
同一个类可以有不同的对象或实例,这些对象的状态可以不同,但功能都是相同的。

3.面向对象程序设计的特性
(1)封装
把类的属性和方法看成了一个密不可分的整体,从而使类具有明确的独立性,这样能够完整地描述并对应于一类具体事物。
(2)消息
一个对象需要另外一个对象提供服务时,它向对方发出一个服务请求,收到请求的对象会响应这个请求并完成指定的服务,向对象发出的服务请求就称为消息,C++中消息是通过调用类的成员函数实现的。

(3)继承
允许在已有类的基础上通过增加新特征而派生出新的类,原有的类称为基类,新建立的类称为派生类。
属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上层的所有类描述的全部性质。
继承性保证了新的程序设计可在原有基础上通过重用、扩展和细化来进行,不必从头做起,大大减少了重新编写新代码的工作量。

(4)多态性
当程序中的其他部分向同名的方法发出同样的消息时,按照接收消息对象的不同能够自动执行类中不同的方法,这就是多态性。

4.面向对象的程序设计
1.面向对象程序的结构框架
面向对象的程序设计中,类作为程序的基本组成单元,通过类将数据和实现方法的函数封装在一起,类和类之间又通过成员、参数、继承和派生等实现相互的通信和联系,从而形成一个完整的整体。
面向对象的程序一般由三个部分构成:
(1)类的定义
(2)类中函数成员的定义
(3)main函数的定义

2.面向对象的程序设计方法与结构化程序设计方法的比较
结构化程序设计方法以过程为中心构造应用程序,数据和处理数据的过程代码是分离的、相互独立的实体,设计出的程序可重用代码少,并且当代码量增加时维护数据和代码的一致性非常困难。
面向对象方法吸收了结构化程序设计方法的优点,同时引入了新概念、新机制并建立了比传统方法更高层次的抽象。
面向对象程序设计中,对象所具有的封装性和继承性使得代码重用成为可能,大大减少了程序出错的可能性。


7.2.1 定义类的一般格式
类的定义

类是由用户定义的一种新的数据类型,它将不同类型的数据和与这些数据有关的操作即函数封装在一起形成了一种数据类型。

类的定义一般由声明和实现两部分组成,第1部分是类的声明,格式:
class 类名
{  public: 数据成员和函数成员的声明     //声明公有成员
    protected:数据成员和函数成员的声明 //声明保护成员
    private:    数据成员和函数成员的声明    //声明私有成员
};             // 注意末尾有分号



类的声明

(1)class是保留关键字,用来定义类;
(2)类名命名方式与标识符命名相同;
(3)类的成员包括数据成员和函数成员两类,分别对应类的属性和行为;
(4)关键字public、protected和private用来控制类成员的访问控制范围,它们称为访问权限修饰符。
(5)一对花括号内的部分称为类体。



函数成员的定义

函数成员既可以在类的体内定义,也可以在类的体外定义
C++程序中的某个函数可以属于某个类或者不属于任何一个类,属于某个类的函数称为成员函数,不属于任何类的函数称为非成员函数或普通函数。



7.2.2成员的访问控制权限
(1)public
属于公有类型的成员可以被类中的任何函数访问,也可以被该类的对象访问,这种类型实际上定义了类的外部接口。
(2)private
属于私有类型的成员只允许本类中的成员函数访问,除了友元以外,其它来自类外的访问都是无效的,这种访问类型实现了封装,私有成员是类中被隐藏的部分。
(3)protected 
受保护类型,在类的继承时对定义的新类会产生影响。
在一个类的定义中,这3个修饰符的使用顺序没有特别规定,既可以按任意的顺序出现,也可以出现多次。
如果在成员前没有出现访问修饰符,默认的访问权限是private

7.2.3 类的数据成员

数据成员只能在类体中进行定义,定义方式与定义一般变量相同,数据成员的类型可以是任意类型,例如整型、浮点型、字符型、数组、指针和引用等。
在类的定义中,不允许对数据成员进行初始化。