1. 程式人生 > >c++ 多繼承 公有,私有,保護

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