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

首先说明几个术语:

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保持不变。这样,公司和房子是除了外人不可以访问,自己,友元,子类都可以访问。

转自:https://www.cnblogs.com/feng-qing-yang/p/5962312.html

c++ 多继承 公有,私有,保护的更多相关文章

  1. 从零开始学C++之继承(一):公有/私有/保护继承、overload/overwrite/override之间的区别

    一.继承 C++很重要的一个特征就是代码重用.在C语言中重用代码的方式就是拷贝代码.修改代码.C++可以用继承或组合的方式来重用.通过组合或继承现有的的类来创建新类,而不是重新创建它们. 继承是使用已 ...

  2. 公有/私有/保护继承、overload/overwrite/override之间的区别

    一.继承 C++很重要的一个特征就是代码重用.在C语言中重用代码的方式就是拷贝代码.修改代码.C++可以用继承或组合的方式来重用.通过组合或继承现有的的类来创建新类,而不是重新创建它们. 继承是使用已 ...

  3. 【转】c++继承:公有、私有、保护

    原文链接:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html 公有继承(public).私有继承(private).保护继承(pro ...

  4. c++继承详解:共有(public)继承,私有继承(private)继承,保护(protected)继承

    公有继承(public)继承.私有继承(private).保护继承(protected)是常用的三种继承方式. 1.公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时 ...

  5. C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承

    公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...

  6. C++ 继承方式 //语法:class 子类 :继承方式 父类 //继承方式 三种: //1.公共继承 //2.保护继承 //3.私有继承

    1 //继承方式 2 //语法:class 子类 :继承方式 父类 3 //继承方式 三种: 4 //1.公共继承 5 //2.保护继承 6 //3.私有继承 7 8 #include <ios ...

  7. C++中公有继承、保护继承、私有继承的区别

    公有继承时基类中各成员属性保持不变,基类中private成员被隐藏.派生类的成员只能访问基类中的public/protected成员,而不能访问private成员:派生类的对象只能访问基类中的publ ...

  8. C++公有继承、保护继承和私有继承

    C++中的继承方式有: public.private.protected三种(它们直接影响到派生类的成员.及其对象对基类成员访问的规则). (1)public(公有继承):继承时保持基类中各成员属性不 ...

  9. C++ 公有继承、保护继承和私有继承的对比

    在c++的继承控制中,有三种不同的控制权限,分别是public.protected和private.定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类是默认public ...

随机推荐

  1. Linux文本编辑器快捷方式

  2. AngularJS2.0起步

    ES6工具链 要让Angular2应用跑起来不是件轻松的事,因为它用了太多还不被当前主流浏览器支持的技术.所以,我们需要一个工具链:

  3. [LeetCode] 225. Implement Stack using Queues_Easy tag: Design

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  4. DNS解析原理和流程

    DNS解析原理和流程   DNS解析其实就是将IP地址(202.96.134.133)变成域名(www.xxxxx.com)   网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所 ...

  5. linq判断一个枚举的Name是否存在

    比如,枚举如下: [Serializable] public enum PayType : int { /// <summary> /// AAA /// </summary> ...

  6. iOS9 & iOS10 & iOS11 HTTP 不能正常使用的解决办法

    iOS9 & iOS10 & iOS11 HTTP 不能正常使用的解决办法 xcode  ios 291.4k 次阅读  ·  读完需要 8 分钟 54 今天升级Xcode 7.0 b ...

  7. Twitter OA prepare: Visit element of the array

    分析:就是建立一个boolean array来记录array里面每个元素的访问情况,遇到访问过的元素就停止visiting,返回未访问的结点个数 public int visiting(int[] A ...

  8. VS2010/MFC编程入门之三十九(文档、视图和框架:概述)

    前面几节讲了菜单.工具栏和状态栏的使用,鸡啄米本节开始将为大家讲解文档.视图和框架的知识. 文档.视图和框架简介 在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工 ...

  9. JavaScript: apply 方法 详解(转)——非常好

    转载自  http://www.cnblogs.com/KeenLeung/archive/2012/11/19/2778229.html 我在一开始看到javascript的函数apply和call ...

  10. python 元组 序列上使用enumerate()函数

    不能直接for n,x,y in enumerate(data)