找回密码
 立即注册
收起左侧

C++老鸟日记002 多态

0
回复
5610
查看
[复制链接]
累计签到:41 天
连续签到:1 天
来源: 原创 2018-9-4 09:28:53 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 baizy77 于 2018-10-1 20:41 编辑

版权声明
---------------------------------------------------------------------------------------------------------------------
该文章原创于Qter开源社区(www.qter.org),作者: 女儿叫老白 (白振勇),转载请注明出处!

---------------------------------------------------------------------------------------------------------------------
本套课程属于:《C++跨平台开发干货》系列课程。

引言
-----------------------------------------------------------------------------
    在自然界中,很多物种都起源于相同的物种,但是不同后代的行为却不尽相同。今天我们就参考自然界的物种,讨论一下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()接口的实现。但是行为却各不相同。这就为面向对象设计提供了基础,各种不同对象,在做同样动作时表现出来可以不一样。
       在派生体系中,也允许中间的某一代为纯虚函数,这样后续的类必须实现该类的纯虚接口。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了