我对课程有疑问
// 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 ();
Run Code Online (Sandbox Code Playgroud)
"私人载体<卡*>"究竟是什么意思?这是否意味着我继承了vector类的所有公共成员?我是否也可以访问矢量私人会员?如果它受到保护或公开而非私密,会如何变化?澄清将不胜感激
私有继承使您可以访问基类的公共和受保护方法,就像公共继承一样.不同之处在于这些方法对您的类是私有的.同样,对于受保护的继承.您可以获得基类的公共和受保护方法,它们在您的类中都受到保护.
私有继承允许您根据另一个类实现一个类,并且与拥有该类的私有数据成员没有什么不同.从这个意义上说,一个私下或"受保护"地继承自另一个的阶级与它有"有一个"的关系,而不是公共继承的"是-a"关系.这意味着例如Liskov替代原则不适用.
现在,在您的特定示例中,从标准库容器继承被认为是不良形式,但请注意,大多数参数适用于公共继承.
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.
}
Run Code Online (Sandbox Code Playgroud)