我有一个关于类(class)的问题
// 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 ();
“private vector< Card* >”到底是什么意思?这是否意味着我继承了 vector 类的所有公共(public)成员?我也可以访问 vector 私有(private)成员吗?如果它是 protected 或公共(public)的而不是私有(private)的,这会有什么不同?澄清将不胜感激
最佳答案
私有(private)继承使您可以访问基类的公共(public)和 protected 方法,就像公共(public)继承一样。不同之处在于这些方法对您的类是私有(private)的。对于 protected 继承也是如此。你得到了基类的 public 和 protected 方法,它们在你的类中都是 protected 。
私有(private)继承允许您根据另一个类来实现一个类,这与拥有该类的私有(private)数据成员没有什么不同。从这个意义上讲,一个从另一个私有(private)或“ protected ”继承的类与其具有“has-a”关系,而不是公共(public)继承的“is-a”关系。这意味着例如 Liskov substitution principle不适用。
现在,在您的特定示例中,从标准库容器继承的是 considered poor form ,但请注意,大多数论点都适用于公共(public)继承。
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.
}
关于非公共(public)继承中的 C++ 基类方法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13588438/