c++中公共继承、私有继承和受保护继承之间的区别是什么?
我在SO上找到的所有问题都是针对具体案例的。
c++中公共继承、私有继承和受保护继承之间的区别是什么?
我在SO上找到的所有问题都是针对具体案例的。
当前回答
Accessors | Base Class | Derived Class | World
—————————————+————————————+———————————————+———————
public | y | y | y
—————————————+————————————+———————————————+———————
protected | y | y | n
—————————————+————————————+———————————————+———————
private | | |
or | y | n | n
no accessor | | |
y: accessible
n: not accessible
基于这个例子的java…我认为一张小桌子胜过千言万语:)
其他回答
任何继承自您的类的类都可以访问受保护的数据成员。但是,私有数据成员不能。假设我们有以下内容:
class MyClass {
private:
int myPrivateMember; // lol
protected:
int myProtectedMember;
};
从扩展到这个类,引用这个。myPrivateMember不能工作。然而,这。myProtectedMember意志。这个值仍然是封装的,所以如果我们有一个myObj类的实例化,那么myObj。myProtectedMember不能工作,所以它的功能类似于私有数据成员。
简介:
Private:除了类内部,没有人可以看到它 Protected: Private +派生类可以看到它 公众:全世界都能看到
在继承时,你可以(在某些语言中)在某个方向上改变数据成员的保护类型,例如从protected变为public。
Member in base class : Private Protected Public
继承类型:对象继承为:
Private : Inaccessible Private Private
Protected : Inaccessible Protected Protected
Public : Inaccessible Protected Public
公共继承对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_。与继承相比,包含在类型之间的耦合不那么紧密,因此通常应该首选它。有时使用容器代替私有继承不像私有继承那样方便。这通常是懒惰的蹩脚借口。
我想没有人知道什么是受保护的继承模型。至少我还没看到任何令人信服的解释。
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。这只是访问的问题。
关于受保护继承和私有继承的使用,你可以在这里阅读。