c++中公共继承、私有继承和受保护继承之间的区别是什么?
我在SO上找到的所有问题都是针对具体案例的。
c++中公共继承、私有继承和受保护继承之间的区别是什么?
我在SO上找到的所有问题都是针对具体案例的。
当前回答
任何继承自您的类的类都可以访问受保护的数据成员。但是,私有数据成员不能。假设我们有以下内容:
class MyClass {
private:
int myPrivateMember; // lol
protected:
int myProtectedMember;
};
从扩展到这个类,引用这个。myPrivateMember不能工作。然而,这。myProtectedMember意志。这个值仍然是封装的,所以如果我们有一个myObj类的实例化,那么myObj。myProtectedMember不能工作,所以它的功能类似于私有数据成员。
其他回答
公共继承对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
为了回答这个问题,我想先用我自己的话描述一下成员的访问器。如果你已经知道这一点,那就跳到标题“下一步:”。
我知道有三种访问器:公共的、受保护的和私有的。
Let:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
所有知道Base的都知道Base包含publicMember。 只有子节点(及其子节点)知道Base包含protectedMember。 除了Base,没有人知道privateMember。
“意识到”,我的意思是“承认存在,从而能够获得”。
下一个:
同样的情况也发生在公共、私有和受保护的继承上。让我们考虑一个类Base和一个继承自Base的类Child。
如果继承是公共的,那么所有知道Base和Child的东西也知道Child从Base继承。 如果继承是受保护的,那么只有Child及其子元素知道它们从Base继承。 如果继承是私有的,那么除了Child之外没有人知道继承。
任何继承自您的类的类都可以访问受保护的数据成员。但是,私有数据成员不能。假设我们有以下内容:
class MyClass {
private:
int myPrivateMember; // lol
protected:
int myProtectedMember;
};
从扩展到这个类,引用这个。myPrivateMember不能工作。然而,这。myProtectedMember意志。这个值仍然是封装的,所以如果我们有一个myObj类的实例化,那么myObj。myProtectedMember不能工作,所以它的功能类似于私有数据成员。
如果你公开地从另一个类继承,每个人都知道你在继承,任何人都可以通过基类指针多态地使用你。
如果你继承受保护的只有你的孩子类将能够多态地使用你。
如果你私有继承,只有你自己能够执行父类方法。
这基本上象征着其他类所拥有的关于你与父类关系的知识