C++ 中私有继承、保护继承与公有继承

区别

下面经过一个示例来介绍三种继承的区别。spa

定义一个基类(假设为一个快退休的富豪):设计

class RichMan
{
public:
    RichMan();
    ~RichMan();
    int m_company;    
private:
    int m_money;
    int m_car;
protected:
    int m_house;
    
};
  • 公司是public的,那么他本身(基类),创业伙伴(友元),儿子(子类),其余人(外部)均可以访问。
  • 钱和车子是private的,本身(基类),创业伙伴(友元)能够访问。儿子(子类)和外人都不给开。
  • 房子是protected的,本身(基类),创业伙伴(友元)能够访问,儿子(子类)也能够访问,外人是不能够访问。

 现在他要退休,但愿寻找继承人。这里有三种继承方式:code

1.公有继承:public

他的儿子继承了他:LittleRichMan类对象

class LittleRichMan :
    public RichMan
{
public:
    LittleRichMan();
    ~LittleRichMan();
};

通过public继承后,LittleRichMan的成员访问权限变成以下形式:blog

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

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

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

继续,若采用私有(private)继承:it

2.私有继承:private

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

能够想象他的儿子是个自私的人,经过private的方式继承:public和protected变成了private。class

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

最后,protected继承:

保护继承:protected

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

原先的public变成了protected,protected保持不变。这样,公司和房子是除了外人不能够访问,本身,友元,子类均可以访问。

谨慎使用private继承

在C++中。公有继承强调的是 “is-a” 的关系,即一个派生类能够当成一个基类来看待,属于同一类。例如:男人(子类)/女人(子类)都是人(父类)。

对于private继承而言,并不存在这样一种关系,为何?

在private继承中,父类全部的成员在子类继承后都会变成private(私有)属性,纵使它们在父类中本来是protected或public属性。

 

采用private继承的意义

  •   Private继承意味着implement-in-terms-of(根据某物实现出)。若你让class D以private继承class B,你的用意是为了采用class B内已经备妥的某些特性,不是由于B对象和D对象存在有任何观念上的关系。
  •   private继承纯粹是一种实现技术(这就是为何继承自一个private base class的每样东西在你的class 内都是private的:由于它们都只是实现枝节而已)。
  •   private继承意味着只有实现部分被继承,接口部分应略去。
  •   若是D以privae继承B,意味着D对象根据B对象实现而得,再没有其余涵义了。
  •   Private继承在软件 “设计” 层面没有意义,其意义只及于软件实现层面。
相关文章
相关标签/搜索