私人成员vs私人经历

问题描述 投票:0回答:1
  • 我有一个[[我无法编辑:
  • 的课程A
class A{ public: int thisCoolFuntion(){ return 0; } };
    我想创建一个使用thisCoolFuntion()的类(我们称它为BC类)
  • [我希望用户能够创建BC的实例,但是他

    没有

可以访问thisCoolFuntion()
  • 我认为一种解决方案是进行private继承:
  • class B : A{ public: int member; void setBMember(){ member = thisCoolFuntion(); } };

      我还考虑过拥有private类型的A成员:
  • class C{ A memberA; int member; public: void setCMember(){ member = memberA.thisCoolFuntion(); } };
      这两个解决方案似乎起作用:
  • int main(int argc, const char * argv[]) { // insert code here... B b; b.setBMember(); //b.thisCoolFuntion(); --> Error! C c; c.setCMember(); //c.memberA.thisCoolFuntion(); --> Error! return 0; }

    问题:

  • 我应该如何比较这2个解决方案?我该如何选择最适合我的项目的?是其中之一更快吗?还是需要更多的内存?是用户更普遍认可的其中一种吗?
    c++ inheritance private private-members
    1个回答
    0
    投票
    这两种方法具有标准术语:inheritancecomposition

    由于这两种方法都可以解决您的问题,所以问题的答案应该是您针对应用程序所针对的design pattern

    继承表示两个类之间的is-a关系,而合成表示两个类之间的has-a关系。

    用于类多边形的最佳设计将使用composition,因为此语句有意义Polygon has a ordered sequence of Points,但不适用Polygon is-a ordered sequence of Points。用C ++术语:

    class Polygon { std::vector<Point> points; };

    虽然逻辑错误是例外:

    struct logic_error : public exception { };

    请参见Difference between Inheritance and Composition
    © www.soinside.com 2019 - 2024. All rights reserved.