gpt4 book ai didi

非公共(public)继承中的 C++ 基类方法访问

转载 作者:太空宇宙 更新时间:2023-11-04 14:56:05 25 4
gpt4 key购买 nike

我有一个关于类(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com