1. 特性:抽象;封装和数据隐藏;多态,继承;代码的可重用性。
2. 采用OOP方法时,首先从用户的角度考虑对象——描述对象所需的数据以及描述用户与数据交互所需的操作。完成对接口的描述后,需要确定如何实现接口和数据存储。最后,使用新的设计方案创建出程序。
3. 指定基本类型完成了三项工作:
l 决定数据对象需要的内存数量
l 决定如何解释内存中的位
l 决定可使用数据对象执行的操作或方法
4. 类规范由两个部分组成:(简单的说,类声明提供了类的蓝图,方法定义提供了细节)
l 类声明:以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述公有接口。
l 类方法定义:描述如何实现类成员函数。
5. 关键字private、protected和public描述了对类成员的访问控制。使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数来访问对象的私有成员。防止程序直接访问数据被称为数据隐藏。
6. 类设计尽可能将公有接口与实现细节分开。公有接口表示设计的抽象组建。将实现细节放在一起并将他们与抽象分开被称为封装。
7. 成员函数两个特殊特征:
l 定义成员函数时,使用作用域解析运算符(::)来标识函数所属的类;
l 类方法可以访问类的private组件。
8. 所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员;但同一个类的所有对象共享同一组类方法。
9. 指定类设计的第一步是提供类声明。类声明类似结构声明,可以包括数据成员和函数成员。声明包括私有部分(在其中声明的成员只能通过成员函数进行访问)和公有部分(其中声明的成员可被使用类对象的程序直接访问)。通常,数据成员被放在私有部分中,成员函数被放在公有部分中,典型的类声明格式如下:
class classname
{
private:
data memberdeclaration
public :
memberfunction prototypes
};
公有部分的内容构成了设计的抽象部分——公有接口。将数据封装到私有部分中可以保护数据的完整性,这被称为数据隐藏。
10. 默认构造函数是在未提供显式初始值时,用来创建对象的构造函数。定义默认构造函数的方式有两种:
l 一种是给已有构造函数的所有参数提供默认值。
l 另一种方式是通过函数重载来定义另一个构造函数——一个没有参数的构造函数。
创建默认构造函数后,便可以声明对象变量,而不对它们进行显式初始化。
构造函数是一种特殊的类成员函数,在创建类对象时被调用。构造函数的名称和类名相同,但通过函数重载,可以创建多个同名的构造函数,条件是每个函数的特征标(参数列表)都不同。另外,构造函数没有声明类型。通常,构造函数用于初始化类对象的成员,初始化应与构造函数的参数列表匹配。
//Bozo类的构造函数的原型如下
Bozo(const char * fname, const char * lname);
//可以用它来初始化新对象
Bozo bozetta = bozo(“Bozetta”,”Biggens”);
Bozo fufu(“fufu”,”OWweewb”);
Bozo *pc = new Bozo(“Popo”,”Le Peu”);
11. 用构造函数创建对象后,程序负责跟踪该对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数——析构函数。析构函数的名称:在类名前加上~
12. this指针指向用来调用成员函数的对象(this被作为隐藏参数传递给方法)。每个成员函数都有一个this指针,this指针指向调用对象。
13. 总结:
l 面向对象编程强调的是程序如何表示数据。使用OOP方法解决编程问题的第一步是根据它与程序之间的接口来描述数据,从而指定如何使用数据。然后设计一个类来实现该接口。一般来说,私有数据成员存储信息,公有成员函数(方法)提供访问数据的唯一途径。类将数据和方法组合成一个单元,其私有性实现数据隐藏。
l 通常,将类声明分成两部分组成,这两部分通常保存在不同的文件中,类声明[.h](包括由函数原型表示的方法)应放到头文件中。定义成员函数的源代码放在方法文件中[.cpp]。
l 类是用户定义的类型,对象是类的实例。这意味着对象是这种类型的变量。
l 每个对象都存储自己的数据,而共享类方法。