在C ++中静态地将用户输入到类中

时间:2012-03-28 04:24:33

标签: c++ oop

我有一个用C ++编写的大型模拟。模拟的主要工作单元是代表神经元的类。要进行计算,神经元类的每个实例都需要访问温度。每个模拟使用数万个神经元类的实例,并且每个神经元的温度是相同的值。出于这个原因,我宁愿不将它存储为常规成员数据,因此神经元类的每个实例都不必占用存储其自身副本的内存。理想情况下,我将它存储为静态成员变量(或者,作为最后的手段,全局变量)。但是,我需要在运行时确定温度作为用户输入。有没有简单的方法让neruon类以静态成员数据的方式访问这个变量?

4 个答案:

答案 0 :(得分:1)

只需提供一个static成员函数,您可以在运行时调用它并设置温度成员 或者,您可以只创建static成员public并直接设置它。作为个人选择,我更喜欢通过成员函数来完成。

class Neuron
{
    public:
        static void setTemperature(int i)
        {
            mTemp = i; 
        }

    private:
        static int mTemp;
};

int Neuron::mTemp = 0;


int main()
{
    //Get Temperature at run-time 
    Neuron::setTemperature(10);

    return 0;
}

答案 1 :(得分:1)

仅仅因为变量是静态的,并不意味着它也需要是const。请参阅以下代码。

#include <cassert>

struct X {
    int member;
    static int static_var;
};

int X::static_var;

int main() {
    X x;
    x.member = 1;
    x.static_var = 2;

    X y;
    y.member = 3;
    y.static_var = 4;

    X::static_var = 5;

    assert(x.static_var == y.static_var);
    assert(&x.static_var == &y.static_var);
}

答案 2 :(得分:0)

我认为这是一个全球性的好候选人。如果您在模拟中添加了一些也使用温度的内容会怎样?

由于任何人都可以随时修改全局变量,我认为IMO的最佳解决方案是拥有像getTemperature()这样的全局范围(标准)函数。然后任何对象都可以随时调用它。将它放在自己的C文件中并将其标记为静态只能通过您选择的机制访问它。

另外,如果一个人不喜欢这样,那就是创建一个静态的GlobalsSimulationInputs类,用温度来吸取东西。

答案 3 :(得分:0)

单身,全球,静态数据,哦,我的!

C ++的数据模型允许我们通过各种机制和黑客对数据进行全局访问,并限制该数据的实例数。

仅仅因为我们可以说并不意味着我们应该这样做。只是因为你有一个可以解决问题的设计,并不意味着你应该选择它。

通常,您拥有管理自己数据的类。如果某个对象需要一些它不管理的数据,则将其作为参数传递。

因此,将温度作为参数传递。明确比隐含更好。

您提到您有一个代表Neurons的班级。我假设你的意思是Neuron,但是拥有一个Neurons类来保持它们在一起也是一件好事。它可以具有适用于所有Neuron计算的温度。