3

我的一个类中有一个变量:

Object * myObject;

我现在需要我的其他课程才能在其他课程中访问。

能够访问它的最佳方式是什么?

以下实现是否正确?

#ifndef GLOBALS_H
#define GLOBALS_H

#include "Object.h"

Object * myObject[5][5];

#endif

编辑:

更多信息,基本上我有A类和B类。

A 类具有 B 类需要访问的变量 myObject。A 类也有 B 类的对象,这意味着我不能在 B 类的标题中包含 A 类的标题,因为 A 类的标题包含 B 类的标题。

4

3 回答 3

3

将对象的引用传递给其他感兴趣的类会更好。假设你不能这样做并且真的需要一个全球性的,你会更好

extern Object * myObject;

在 globals.h 和

Object * myObject;

在 globals.cpp 中

否则,每个包含 globals.h 的源文件都会选择一个重复的定义myObject

于 2013-05-31T22:11:18.867 回答
2

如果您的所有类都共享同一个对象,您可能会将其作为静态变量添加到基类中。

class base
{
    static Object* myObject;
};

class inherit : base
{
    void foo()
    {
         // can access myObject
    }
};

class inherit2 : base
{
    void bar()
    {
         // can access myObject
    }
};
于 2013-05-31T22:22:26.620 回答
0

存储全局变量的最社会可接受的解决方案绝对是单例。C++ 中的典型实现如下所示:

#include <iostream>
using namespace std;

class Singleton
{
public:
        static Singleton& Get() {
                static Singleton singleton;
                return singleton;
        }

        void DoSomething() { cout << "Something!\n"; }

private:
        Singleton() {}
};

int main()
{
        Singleton::Get().DoSomething();
}

与典型的全局变量相比,它的主要优点是您可以更好地控制对象的构造方式。

只是不要忘记它仍然是一个全局变量,所以你应该只在它是最不邪恶的选择时使用它。

于 2013-05-31T23:04:37.577 回答