在类之间传递对象数组

时间:2013-07-23 17:58:46

标签: c++ class pointers

下午所有, 关于Stack Overflow的第一个问题 - 我会尽力清楚。

我为类“Class 2”创建了一个对象数组“Objects2 [arraySize]”,必须在Class 1和main()函数中引用它。

Class1.h

class Class1
{
public:
  void parseFunction(several parameters);

private:
  int otherVariables; 
};

Class1.cpp

#include "Class1.h"

void Class1::parseFunction(several parameters)
{
  for(int i = 0; i < arraySize; i++)
  {
    Objects2[i].someMemberFunction();
  }
}

主要

#include "Class1.h"

main()
{
  Class2 Objects2[arraySize];    //Arbitrary array size
  Class1 Object1;

  Object1.parseFunction(some parameters);

  for(int j = 0; j < arraySize; j++)
  {
    Objects2[j].someOtherMemberFunction();
  }
}

我尽我所能简化了这一点,希望能够达到可读性。我的目标是能够从多个类访问这些对象“Objects2 [arraySize]”,但我正在努力使指针工作。我故意选择使用固定数组大小而不是向量来尝试简化代码。

现在只有一个类(错误,主要的OR类1)可以一次访问这些对象及其功能。我试着将Class 1作为第2类中的函数的“传递”,但感觉很好。有更优雅的方式吗?有什么指针吗?

编辑:要明确,我不太清楚如何在不同的类之间共享对象。我的目标是创建大量的这些“Objects2 [arraySize]”对象(通过创建它们的数组来完成),并在几个不同的类中访问它们。我已经研究了通过引用传递,但是对于这个对象数组来说无法完全正确。

2 个答案:

答案 0 :(得分:0)

当您正在寻找更通用的答案时,这可能是一个特定的答案,但您可以简单地将该数组包含为Class1的成员并提供这样的公共访问。

class Class1
{
  public:
    Class2 Objects2[arraySize];
    void parseFunction(several parameters);

  private:
    int otherVariables; 
};

在主程序中,您可以将其作为Object1.Objects2访问。如果您不希望它与实例绑定,您可以将其设为静态成员。

但是,更好的方法可能是隐藏实际成员并提供访问者(获取/设置)。这取决于你想要做什么。

如果您想通过引用传递,那么您可以在Class1中更改您的方法,如下所示:

void Class1::parseFunction(several parameters, Class2& Objects2[])

然后将其作为main中的参数传递,并在parseFunction方法中引用它。

另一种方法是包含一个“Globals.h”文件,该文件定义了你想在任何地方访问的所有内容。

答案 1 :(得分:0)

Objects2位于“main”中,因此甚至无法从Class1对象访问它。您可以选择的一些选项是: (1)将数组传递给Class1 :: parseFunction。 (2)将实际参考/指针存储在“Class1”中。 (3)使数组全局化。