我对课程有疑问
// Using private inheritance
class CardPile : private vector<Card*> {
public:
CardPile ();
virtual ~CardPile ();
void add (Card* card);
void add (CardPile & otherPile);
void remove (Card* card);
void shuffle ();
“私人向量&lt;卡*&gt;”是什么是什么意思?这是否意味着我继承了vector类的所有公共成员?我是否也可以访问矢量私人会员?如果它受到保护或公开而非私密,会如何变化?澄清将不胜感激
答案 0 :(得分:9)
私有继承使您可以访问基类的公共和受保护方法,就像公共继承一样。不同之处在于这些方法是您的类的私有。同样,对于受保护的继承。您可以获得基类的公共和受保护方法,它们在您的类中都受到保护。
私有继承允许您根据另一个类实现一个类,并且与该类的私有数据成员没有什么不同。从这个意义上说,一个私下或“受保护”地继承自另一个的阶级与它有“有一个”的关系,而不是公共继承的“是-a”关系。这意味着例如Liskov substitution principle不适用。
现在,在您的特定示例中,继承自标准库容器的是considered poor form,但请注意,大多数参数都适用于公共继承。
class Foo
{
void privateFoo() const {}
public:
void foo() const {}
};
class Bar : Foo // class inheritance is private by default
{
public:
void bar() const {
foo(); // OK, foo() is a private method of Bar.
privateFoo(); // Error! privateFoo() is private to Foo.
}
};
int main()
{
Foo f;
f.foo(); // OK
Bar b;
b.bar(); // OK, calls foo() internally
b.foo(); // Error! foo() is private in Bar.
}
答案 1 :(得分:0)
继承中的可见性与组合中的规则完全相同。
也就是说,CardPile
继承vector<Card*>
的方式与public
继承的方式相同。
不同之处在于范围或类型可以了解除CardPile
及其朋友之外的此继承。