c++ - 在不使用全局变量的情况下从主范围更改函数中的局部变量

标签 c++

我的代码中有一个函数类型:

double f (double x, double y){
...
int entry_1 = 0;
int entry_2 = 1;
...
}

entry_1entry_2 的值将在函数 f 内部循环后发生变化。函数 f 将在主脚本中以相同的方式使用:

double f_value;
double y_instance = 0.5;
for (int i = 0; i<100; i++){
 ...
f_value = f(x*i, y_instance);
...
}

假设在这个循环之后,entry_1 = 7entry_2 = 0,因为它们在 f 函数内部发生了变化。

如果 entry_1entry_2 是全局变量,现在我会这样做:

entry_1 = 0;
entry_2 = 1;

for (int i = 0; i<100; i++){
...
f_value = f(x*i-2, y_instance);
...
}

我认为将 entry_1entry_2 设置为输入参数不是个好主意,因为我会被迫在 for 期间传递一些值 在主函数中循环。我希望 entry_1entry_2for 循环期间由 f 操作,并在这些循环之后重新初始化它们来自主函数。

最佳答案

您可以使用一个类,并使您的程序面向对象:

class Foo
{
  public:
    double f (double x, double y)
    {
        return x + y + entry_1; // for example.
    }
    void setEntry1(double value)
    {
        entry_1 = value;
    }
  private:
    double entry_1 = 0;
    double entry_2 = 1;
};

然后你可以这样使用它:

Foo object;
object.setEntry1(0.5);

double z = object.f(0.1, 0.2);
double z1 = object.f(0.2, 0.3);

这允许您让多个对象使用不同的 entry 值执行 f。并更改那些 entry 值。

关于c++ - 在不使用全局变量的情况下从主范围更改函数中的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57465535/

相关文章:

c++ - 通用重载运算符

c++ - 为什么向 QListView 添加样式表会更改并非由样式表本身决定的行为?

c++ - 如果在 c++ 之前未定义,则定义函数/方法

c++ - 如何在 C++ 中同时设置一个 vector 及其所有数据?

c++ - GSL 中是否有 `numpy.minimum` 等价物?

c++ - 数组中的初始化列表

c++ - 了解神秘的C++语句

c++ - float 数组抛出 "incomplete type is not allowed"

c++ - 我可以使用 std::stop_source 延迟取消工作线程中的所有工作线程吗?

c++ - 使用 LUAPlus 将 Lua 表函数绑定(bind)到 C++ 变量