Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1853003
  • 博文数量: 274
  • 博客积分: 2366
  • 博客等级: 大尉
  • 技术积分: 1880
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-22 09:37
文章分类

全部博文(274)

文章存档

2022年(1)

2020年(10)

2019年(7)

2018年(18)

2017年(26)

2016年(32)

2015年(43)

2014年(30)

2013年(44)

2012年(36)

2011年(17)

2010年(10)

分类: C/C++

2018-06-22 17:42:03

昨天学习三种继承方式,有些比喻十分形象,特此分享。

首先说明几个术语:

1.基类

基类比起它的继承类是个更加抽象的概念,所描述的范围更大。所以可以看到有些抽象类,他们设计出来就是作为基类所存在的(有些名字里面有abstract的)。

基类也叫父类,虽然本人觉得这个比喻并不恰当。因为实际上子类是基类的扩充,描述了更加具体的东西。但现实的父子关系并非如此。但在有些方面这个比喻还是比较恰当的。

现在我们假设基类是一个快要退休的富豪。代码如下:

复制代码
class RichMan
{ public:
    RichMan(); ~RichMan(); int m_company; private: int m_money; int m_car; protected: int m_house;
    
};
复制代码

公司是public的,那么他自己(基类),创业伙伴(友元),儿子(子类),其他人(外部)都可以访问。

钱和车子是private的,自己(基类),创业伙伴(友元)可以访问。儿子和外人都不给开。

房子是protected的,自己(基类),创业伙伴(友元)可以访问,儿子(子类)也可以访问,外人是不可以访问。

现在他要退休了,那么有三种继承方式:

1.公有继承:public

他的儿子继承了他:LittleRichMan 类

复制代码
class LittleRichMan : public RichMan
{ public:
    LittleRichMan(); ~LittleRichMan();
};
复制代码

经过public继承后,LittleRichMan的成员访问权限就变成了:

复制代码
#include "RichMan.h" class LittleRichMan : public RichMan
{ public:
    LittleRichMan(); ~LittleRichMan(); int m_company;//仿佛 protected: int m_house;//仿佛 };
复制代码

 

也就是说,public成员保持不变,private成员不可见,protected成员也保持不变。

他的儿子继续开着公司,住着房子,但他爸爸的车子和钱是拿不到了。

继续,private继承:

复制代码
class LittleRichMan : private RichMan
{ public:
    LittleRichMan(); ~LittleRichMan(); private: int m_company;//仿佛 int m_house;//仿佛 };
复制代码

 

可以想象他的儿子是个自私的人,通过private的方式继承:public和protected变成了private。

自己占用了公司和房子,这样除了自己和友元,任何方式都不得访问。

最后,protected继承:

复制代码
class LittleRichMan : private RichMan
{ public:
    LittleRichMan(); ~LittleRichMan(); protected: int m_company;//仿佛 int m_house;//仿佛 };
复制代码

原先的public变成了protected,protected保持不变。这样,公司和房子是除了外人不可以访问,自己,友元,子类都可以访问。

阅读(1065) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~