【问题标题】:How to create a class which uses member functions defined in another class C++如何创建一个使用另一个类 C++ 中定义的成员函数的类
【发布时间】:2018-04-26 12:05:05
【问题描述】:

我是面向对象编程的新手,在如何最好地编写类方面有点挣扎。

我试图将排序的概念抽象为不仅仅是数字列表的对象。我有一个抽象基类SortableContainer,它包含用于比较和交换元素的所有必要虚函数,以及一些重载运算符。然后我有两个派生出来的类,MVectorCoordinateArray。这两个派生类对基类中的所有虚函数都有适当的定义。到目前为止,一切都运行良好。 MVector 只存储类似向量的对象,CoordinateArray 存储坐标向量,在该向量上定义了“小于”的概念。

我现在的问题是我创建了一个新类Life,我想用它来实现生命游戏,使用CoordinateArray 对象来存储活细胞。我的Life 类的大纲如下所示:

class Life
{
public:
   CoordinateArray LiveCells;

   Life();
};

当我创建一个 Life 对象并使用一些活动单元格的坐标对其进行初始化时,CoordinateArray 派生类中定义的任何成员函数都不起作用。我怎样才能解决这个问题?我是否必须从SortableContainer 类派生Life 类,然后覆盖所有纯虚函数?任何帮助或帮助方向将不胜感激。

【问题讨论】:

  • 请查看此C++ books 列表。
  • 你为什么有所有这些课程?对于手头的问题,它们似乎完全没有必要。 (对于绝大多数问题,就此而言。)
  • 你为什么说“这些功能……都不起作用”?我不明白你的意思。你能举个例子吗?
  • 究竟发生了什么意外?什么是预期的没有发生? “将不起作用”不是问题描述,更不是问题。
  • 你的 CoordinateArray 类有公共接口吗?继承层次之外的类只能使用该类的公共函数。

标签: c++ class inheritance member-functions


【解决方案1】:

为了简单实用地回答您的问题,是的,如果您希望您的 Life 对象具有它们需要来自某个地方的一些成员函数,最直接的方法是从包含这些函数的类中派生它成员函数,组合不会将成员转移给所有者,继承会这样做:

class Life : public CoordinateArray
{
public:
   Life();
};

现在您可以将您的Life objects 用作CoordinateArray 对象。如果父类中的任何东西是纯虚拟的,您确实需要在派生类中实现它,但即使不是,您仍然可以在子类中重新实现它以覆盖父行为。

我故意回避概念和设计问题,这主要是一个技术答案,从设计角度判断这需要更多上下文并且也有一些主观方面,所以这完全是另一个故事。

【讨论】:

    【解决方案2】:

    看看 CoordinateArray 的声明会很有用。但是,我怀疑您需要在 CoordinateArray 中创建公共方法。如果方法被声明为私有(即,它们在您的类声明中位于 private: 之后),那么它们只能在类自己的范围内使用。如果它们被宣布为公共(在public: 下方),那么它们可以在任何范围内使用。 (作为旁注,还有另一个分类,protected,这意味着它们可以被该类及其任何子类使用。)

    【讨论】:

      【解决方案3】:

      为了初始化一些活细胞的坐标,声明类 CoordinateArray LiveCells 对 Life 公开

      class Life::public CoordinateArray{ }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 2016-01-28
        • 1970-01-01
        相关资源
        最近更新 更多