指向全局变量的类成员的指针

时间:2019-07-15 13:31:14

标签: c++

我有一个类Foo,我希望能够将其写入全局数组Bar

Global.h

extern float Bar[256];

Foo.h

class Foo {
   public:
      Foo(float array[])
      void write(float toWrite);

   private:
      char ptr;
}

Foo.cpp

Foo::write(float toWrite){
   array[ptr] = toWrite;
   ptr++;
}

main.cpp中:

#include "Global.h"
#include "Foo.h"

Foo foo(Bar);

main(){
  foo.toWrite(100);
}

这是将指向全局数组的指针传递给新对象的正确方法吗?我不想创建本地副本。

1 个答案:

答案 0 :(得分:0)

在回答此问题时避免XY问题。为什么要使用全局变量?如果是因为要在类Foo的所有实例中使用Bar的单个实例,则可以使用静态成员变量来执行此操作,而无需使用丑陋的全局变量。如果要让Foo的每个实例将其Bar数组映射到不同的内存块,那就是另一个问题。

您还需要初始化索引值,这是一些示例代码。

#include <iostream>

class Foo
{
  public:
    Foo();
    void write(float toWrite);

    static float Bar[256];

  private:
    unsigned char index;
};

float Foo::Bar[256] = {0,0,0,0,0};

Foo::Foo(){
  index = 0;
}

void Foo::write(float toWrite){
  Foo::Bar[index++] = toWrite;
}

int main()
{
    Foo foo1, foo2;

    foo1.write(100);
    foo1.write(100);
    foo2.write(200);

    std::cout << Foo::Bar[0] << ", " << Foo::Bar[1] << ", " << Foo::Bar[2] << ", " << Foo::Bar[3] << "\n";
}

将打印出

200, 100, 0, 0