0

下午,关于堆栈溢出的第一个问题——我会尽力说清楚。

我为类“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]”,但我正在努力让指针工作。我有意选择使用固定数组大小而不是向量来尝试暂时简化代码。

就目前而言,一次只有一个类(err,main OR class 1)可以访问这些对象及其函数。我研究过让 Class 1 充当 Class 2 中的功能的“通道”,但这感觉很做作。有没有更优雅的方式?任何指针?

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

4

2 回答 2

0

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

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

  private:
    int otherVariables; 
};

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

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

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

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

然后将它作为参数从 main 传入并在 parseFunction 方法中引用它。

另一种方法是包含一个“Globals.h”文件,该文件定义了您希望随处访问的所有内容。

于 2013-07-23T18:28:46.137 回答
0

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

于 2013-07-23T18:36:19.723 回答