如何创建一个使用另一个类C ++中定义的成员函数的类

时间:2017-11-13 17:53:15

标签: c++ class inheritance member-functions

我是面向对象编程的新手,并且在如何最好地编写类时遇到了一些困难。

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

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

class Life
{
public:
   CoordinateArray LiveCells;

   Life();
};

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

3 个答案:

答案 0 :(得分:0)

简单地以实用的方式回答你的问题,是的,如果你想让你的Life对象拥有一些他们需要来自某个地方的成员函数,那么最直接的方法是从类中派生它包含那些成员函数,组合不会将成员转移给所有者,继承就是这样:

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

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

我故意避免构思和设计问题,这主要是一个技术答案,从设计的角度来判断这需要更多的背景,并且也有一些主观方面,所以这是另一个故事。

答案 1 :(得分:0)

查看CoordinateArray的声明会很有用。但是,我怀疑你需要在CoordinateArray中创建公共方法。如果方法被声明为私有(即它们在类声明中private:之后),那么它们只能在类的自定义范围内使用。如果他们被公开(在public:下面),那么他们可以在任何范围内使用。 (作为旁注,还有一个其他分类,受保护,这意味着它们可以被类及其任何子类使用。)

答案 2 :(得分:-1)

为了初始化一些活细胞的坐标,将CoordinateArray LiveCells类声明为生命

class Life::public CoordinateArray{ }