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

  • 相关阅读:
    LeetCode 453 Minimum Moves to Equal Array Elements
    LeetCode 112 Path Sum
    LeetCode 437 Path Sum III
    LeetCode 263 Ugly Number
    Solutions and Summay for Linked List Naive and Easy Questions
    AWS–Sysops notes
    Linked List
    All About Linked List
    datatable fix error–Invalid JSON response
    [转]反编译c#的相关问题
  • 原文地址:https://www.cnblogs.com/sea-stream/p/9926722.html
Copyright © 2011-2022 走看看