封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。 封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过 外部接口,一特定的访问权限来使用类的成员。 例如,在抽象的基础上,我们可以将时钟的数据和功能封装起来,构成一个时钟类。 按c++的语法,时钟类的声明如下: Clock { public: //共有成员,外部接口 SetTime( NewH, NewM, NewS); ShowTime(); private: //私有成员,外部无法访问 Hour,Minute,Second; } 可以看到通过封装使一部分成员充当类与外部的接口,而将其他的成员隐蔽起来,这样就达到了对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。 什么是多态(Polymorphisn)?按字面的意思就是“多种形状”。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数(Virtual Function)实现的。 多态再解释一下 我要说清楚 简而言之,多态就是对一个相同接口的调用会产生不同的行为。例如,基类是CShape,然后从这个基类派生出CCircle(圆),CRetangle(矩形),CLine(线)三个不同的类。基类定义了一个虚拟函数draw(),表示派生类中会有绘图的动作,三个派生类尽管都有draw()函数并且参数、返回值类型都一样,但是有各自的行为特性。程序中有这样一段代码:定义了一个CShape类型的指针,然后这个指针会被赋值,接着调用draw()函数。我们知道,基类指针是可以指向派生类对象的。在编译时我们不确定这个指针会被赋予什么类型的指针值——可能是CCircle类的,也可能是CRetangle类型的。由于draw()是虚拟函数,因此可以根据在运行时指针的类型调用不同的类中的虚拟函数(动态绑定)。 罗嗦了半天,汗~~~~~~~~~~~。一句话,多态是由虚拟函数与动态绑定实现的 好,接着是“虚函数”(或者是“虚方法”)。虚函数就是允许被其子类重新定义的成员函数。而子类重新定义父类虚函数的做法,称为“覆盖”(override),或者称为“重写”。 “继承”是面向对象软件技术当中的一个概念。如果一个类A继承自另一个类B,就把这个A称为“B的子类”,而把B称为“A的父类”。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。 继承是指一个对象直接使用另一对象的属性和方法。事实上,我们遇到的很多实体都有继承的含义。例如,若把汽车看成一个实体,它可以分成多个子实体,如:卡车、公共汽车等。这些子实体都具有汽车的特性,因此,汽车是它们的“父亲”,而这些子实体则是汽车的“孩子”。