面向对象程序设计的主要特点:抽象、封装、继承、多态。
1、抽象
编写程序的目的就是描述和解决现实世界中的问题。第一步就是将现实世界中的对象和类如实的反映在程序中。
定义:对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。
两个方面:数据抽象和行为抽象。
例1:加入我们要在计算机上实现一个简单的时钟程序,通过对时钟进行分析可以看出,需要3个整型数据来存储时间,分别表示时、分、秒——这就是对时钟所具有的数据进行抽象。另外,时钟要具有显示时间、设置时间等基本功能——这就是对它的行为抽象。用C++的变量和函数可以将抽象后的时钟属性描述如下:
//数据抽象
int hour, minute, second;
//行为抽象(也叫功能抽象)
ShowTime();
SetTime();
例2:对人进行抽象。
//数据抽象
char *name, *sex, *age;
//行为抽象
Eat();
Walk();
Work();
Study();
2、封装
定义:将抽象得到的数据和行为相结合,形成一个有机的整体。也就是将数据与操作数据的函数代码进行有机的结合,形成“类”。
例:在抽象的基础上,我们将时钟的数据和功能封装起来,构成一个时钟类:
class Clock{
public:
void SetTime(int NewH, int NewM, int NewS);
void ShowTime();
private:
int Hour, Minute, Seconds;
};
通过封装,使一部分成员充当类与外部的借口,而将其它的成员隐藏起来。达到对成员访问控制权限的合理控制。
将数据和代码封装为一个可重用的程序模块,在编写程序时就可以有效的利用已有的成果。通过外部接口依据特定的规则就可以使用封装好的模块,使用时也不必了解类的实现细节。
3、继承
现实世界中,很多事物之间都有着复杂的联系。继承便是其中一种:汽车和自行车都从属于“交通工具”,但是它们在外观和功能上都各具不同,各有千秋。同样,在面向对象的程序设计中,提供了类的继承机制。大大提高了代码的可重用性和可扩充性。
被继承的类:基类。通过继承得到的新类:派生类。
派生类继承了基类的所有数据成员和除构造函数和析构函数之外的函数成员。
同名隐藏:如果派生类声明了一个和基类成员同名的新成员ÿ