是否可以在不使用C ++创建新对象的情况下将变量传递出类

时间:2010-11-23 17:19:50

标签: c++ oop class

我有一个变量,它是我的一个类的成员,另一个需要,但我不确定如何在不使用全局变量的情况下有效地传递它们之间的值,这是我的意思我想尽可能避免。我知道我可以创建一个对象,但这会调用原始类的构造函数,它会执行许多函数并将不必要的结果写入内存,这将浪费系统资源。

是否有一种简单的方法可以在两个函数之间传递这个值?


更新:需要变量的类,名为no_of_existing_devicesclass Initialise的目的是打开一个文件并计算它包含的测试行数,并将该数字放在变量int no_of_existing_devices中,然后由Device::Device()使用为每个

创建一个对象
class Device
{   
public:
    void view_attribute_list(); 
    void set_attribute();
    Device();
};

Device::Device()
{
    for (int count = 0; count < no_of_existing_devices; count ++)
    {
    // Create an object for each iteration, up to a maximum of no_of_existing_devices
    }
}

此变量是其成员的类

class Initialise
{
public:
    int no_of_existing_devices;
    bool initialisation;
    string existing_device_list[100];

    void initialise_existing_devices();
    Initialise();
};

Initialise::Initialise()
{
    no_of_existing_devices = 0;
}

void Initialise::initialise_existing_devices()
{
    string line;
    ifstream DeviceList;
    DeviceList.open("devices/device_list");
    while (true)
    {
        getline(DeviceList, line, '\n');
        if (DeviceList.eof())
        {
            break;
        }
        ++ no_of_existing_devices;
    }
    DeviceList.close();

    DeviceList.open("devices/device_list");
    for (int i = 0; i < no_of_existing_devices; i ++)
    {
        getline(DeviceList, line, '\n');
        existing_device_list[i] = line;
    }

    Device existing_devices[no_of_existing_devices];
    !initialisation; // Existing devices are now initialised
}

4 个答案:

答案 0 :(得分:1)

好的,根据我的理解:

  1. 您不希望拥有全局
  2. 您不想拥有静态
  3. 您不希望在DeviceInitialise
  4. 之间引入依赖关系

    还有另外一个选项,假设拥有 DeviceInitialise,将no_of_existing_devices移到那里,然后构建DeviceInitialise引用此变量...

答案 1 :(得分:0)

在类似的情况下我只是将指针传递给成员---我必须调用一个成员函数,所以它是一个指向成员函数的指针,http://www.parashift.com/c++-faq-lite/pointers-to-members.html 这有点乱,但它有效: - )。

答案 2 :(得分:0)

如果原始类中的变量可以保存没有类实例的值,我会认为该变量是静态的。如果没有创建该类的公共静态成员。并在目标类中使用它。 类似的东西:

// .h file

class A 
{
   public:
       static int a;
}

// .cpp file

int A::a = 123;

// .cpp file of class B

void B::foo()
{
  cout << A::a;
}

答案 3 :(得分:-1)

如果是类属性(内部变量),则可以通过get方法获取引用。否则,您可以在要从另一个访问attribtue的类上使用friend关键字。例如,如果在类A上声明friend class B;,则可以在类A上访问类B的属性。 A级。

我建议你使用第一种方法来保持代码OO纯;)

编辑:当然,如果您通过引用访问,则没有浪费资源:)

编辑2:Initialise类上使用静态方法,该方法返回no_of_existing_devices并在Initialise::NoOfExistingDevices()类上调用Device。如果你想要资源使用这样的指针:

public static int* Initialise::NoOfExistingDevices() {
    return &no_of_existing_devices;
}

顺便说一句,我建议你改变变量private