首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >私有继承与组合:什么时候使用哪个?

私有继承与组合:什么时候使用哪个?
EN

Stack Overflow用户
提问于 2011-08-27 02:26:27
回答 1查看 7.6K关注 0票数 22

私有继承与组合。

我有点困惑,什么时候使用每一个。由于私有继承密封,在某种程度上,继承链,给定:

class A
{
private:
    int z;
protected:
    int y;
public:
    int x;
};

class B : private A
{
    /* B's data members and methods */
    /* B has access only to A's public and protected */
};

class C : public B
{
    /* can access no fields of B */
};

C将不能使用B的任何字段。我什么时候使用私有继承,什么时候使用组合?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2011-08-27 02:32:47

恰如其分地回答了您的问题。

在这里复制它:

在可以的时候使用组合,在必要的时候使用私有继承。

通常,您不希望访问太多其他类的内部结构,而私有继承给了您一些额外的权力(和责任)。但是私有继承并不是邪恶的;它只是维护成本更高,因为它增加了某人更改某些东西从而破坏您的代码的可能性。

当您想要构建一个使用class Wilma中的代码的class Fred,并且class Wilma中的代码需要调用您的新类Fred中的成员函数时,私有继承是一个合法的、长期的用途。在这种情况下,Fred调用Wilma中的非虚拟变量,而Wilma调用(通常是纯虚拟变量)本身被Fred覆盖。对于组合来说,这要困难得多。

class Wilma {
 protected:
   void fredCallsWilma()
     {
       std::cout << "Wilma::fredCallsWilma()\n";
       wilmaCallsFred();
     }
   virtual void wilmaCallsFred() = 0;   // A pure virtual function
 };

 class Fred : private Wilma {
 public:
   void barney()
     {
       std::cout << "Fred::barney()\n";
       Wilma::fredCallsWilma();
     }
 protected:
   virtual void wilmaCallsFred()
     {
       std::cout << "Fred::wilmaCallsFred()\n";
     }
 };
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7209019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档