本帖最后由 baizy77 于 2018-10-1 20:41 编辑
版权声明 ---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
引言 ----------------------------------------------------------------------------- 在自然界中,很多物种都起源于相同的物种,但是不同后代的行为却不尽相同。今天我们就参考自然界的物种,讨论一下C++的一个特性:多态
正文 ----------------------------------------------------------------------------- 多态指多个派生类的同一个接口(接口名称相同,参数个数、参数类型均相同)的行为不同。也就是派生类各自有各自的表现。 // planet.h class CPlanet { public: CPlanet(){} virtual~CPlanet(){} public: virtual void light() = 0; };
// sun.h #include <iostream> using std::cout; using std::endl; class CSun : public CPlanet { public: CSun()){} ~CSun(){} public: virtualvoid light(){cout << “俺整天发着耀眼的光芒”<<endl;} };
// moon.h #include <iostream> using std::cout; using std::endl; class CMoon : public CPlanet { public: CMoon()){} ~CMoon (){} public: virtualvoid light(){cout << “Sorry, 俺只负责反射太阳光。刺到您眼睛的话,去投诉它,别来找俺。”<<endl;} };
// earth.h #include <iostream> using std::cout; using std::endl; class CEarth : public CPlanet { public: CEarth()){} ~CEarth (){} public: virtualvoid light(){cout << “看啥看,俺不发光!”<<endl;} }; 从以上几个类可以看出,CPlanet基类,负责提供纯虚接口light(),当然,它也可以提供默认实现。比如: virtualvoid light(){cout << “我发光了,大家注意!” << endl;} CSun、CMoon、CEarth这三个派生类都提供了light()接口的实现。但是行为却各不相同。这就为面向对象设计提供了基础,各种不同对象,在做同样动作时表现出来可以不一样。 在派生体系中,也允许中间的某一代为纯虚函数,这样后续的类必须实现该类的纯虚接口。
|