zoukankan      html  css  js  c++  java
  • c++ 多继承 公有,私有,保护

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

    首先说明几个术语:

    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

  • 相关阅读:
    安装pip-9.0.1-py2.py3-none-any.whl
    Flask-Moment本地化日期和时间
    在windows下使用VirtualEnv建立flask项目
    java web中Jdbc访问数据库步骤通俗解释(吃饭),与MVC的通俗解释(做饭)
    java web中cookie的永久创建与撤销
    myeclipse与数据库进行连接(无需写代码进行验证)
    求二维数组最大子数组和
    Java代码实现 增删查 + 分页——实习第四天
    JDBC 数据库连接操作——实习第三天
    Java基础语法实例(2)——实习第二天
  • 原文地址:https://www.cnblogs.com/sea-stream/p/9926722.html
Copyright © 2011-2022 走看看