c++中公共继承、私有继承和受保护继承之间的区别是什么?

我在SO上找到的所有问题都是针对具体案例的。


当前回答

它本质上是派生类中基类的公共和受保护成员的访问保护。通过公共继承,派生类可以看到基类的公共成员和受保护成员。而私有继承则不能。使用protected,派生类及其派生的任何类都可以看到它们。

其他回答

class A 
{
    public:
       int x;
    protected:
       int y;
    private:
       int z;
};

class B : public A
{
    // x is public
    // y is protected
    // z is not accessible from B
};

class C : protected A
{
    // x is protected
    // y is protected
    // z is not accessible from C
};

class D : private A    // 'private' is default for classes
{
    // x is private
    // y is private
    // z is not accessible from D
};

重要提示:类B, C和D都包含变量x, y和z。这只是访问的问题。

关于受保护继承和私有继承的使用,你可以在这里阅读。

如果你公开地从另一个类继承,每个人都知道你在继承,任何人都可以通过基类指针多态地使用你。

如果你继承受保护的只有你的孩子类将能够多态地使用你。

如果你私有继承,只有你自己能够执行父类方法。

这基本上象征着其他类所拥有的关于你与父类关系的知识

公共继承对IS-A关系建模。与

class B {};
class D : public B {};

每个D都是B。

私有继承为IS-IMPLEMENTED-USING关系建模(或者其他什么关系)。与

class B {};
class D : private B {};

D不是B,但每个D都在实现过程中使用了B。私有继承总是可以通过使用包含来消除:

class B {};
class D {
  private: 
    B b_;
};

这个D也可以用B实现,在这种情况下使用它的b_。与继承相比,包含在类型之间的耦合不那么紧密,因此通常应该首选它。有时使用容器代替私有继承不像私有继承那样方便。这通常是懒惰的蹩脚借口。

我想没有人知道什么是受保护的继承模型。至少我还没看到任何令人信服的解释。

Member in base class : Private   Protected   Public   

继承类型:对象继承为:

Private            :   Inaccessible   Private     Private   
Protected          :   Inaccessible   Protected   Protected  
Public             :   Inaccessible   Protected   Public

简介:

Private:除了类内部,没有人可以看到它 Protected: Private +派生类可以看到它 公众:全世界都能看到

在继承时,你可以(在某些语言中)在某个方向上改变数据成员的保护类型,例如从protected变为public。