gpt4 book ai didi

c++ - 私有(private)变量依赖于未指定的私有(private)变量(C++)

转载 作者:行者123 更新时间:2023-11-28 05:01:25 24 4
gpt4 key购买 nike

假设我有这样一个类:

class SpinSystem{
private:
int L;
int L2;
const int k=1, J=1;
const int teq, tcorr;
const double TC=2/log(1+sqrt(2.0));//TC=2.269;
double Temp;
int Nmuestras;
int s[L][L]; int E,M;
int Cluster[L2][2]; int write;
public:
void set_values(int, double, int);
};

void SpinSystem::set_values(int length, double temperature, int nsamples){
L = length;
Temp = temperature;
Nmuestras = nsamples;
L2 = length*length;
teq = (int)(10*pow(length/8.0,0.58));
tcorr = (int)(1*pow(length/8.0,0.58));
}

私有(private)变量 L2、teq、tcorr 取决于 L 的值。这就是我使用 set_values 方法设置它们的值的原因。但是,我必须定义一些数组,例如 s[L][L] 和 Cluster[L2][2],它们的大小显然取决于 L。我该如何实现呢?提前致谢。

最佳答案

您应该在构造函数中处理所有这些; init 函数有各种相关的问题。并且您应该确保变量按依赖顺序列出(即,如果一个变量依赖于另一个变量,则后者必须首先声明)。此外,固定常量可以简单地设为静态,因为它们始终相同。您不需要保留从其他变量(如 L2)中简单派生的变量。尽可能内联初始化。

class SpinSystem{
private:
static constexpr int k=1;
static constexpr int J=1;
static constexpr double TC=2/log(1+sqrt(2.0));//TC=2.269;

int teq = (int)(10*pow(length/8.0,0.58));
int tcorr = (int)(1*pow(length/8.0,0.58));

int L;
double Temp;
int Nmuestras;

std::vector<int> s;
int E;
int M;
std::vector<int> Cluster;
int write;
public:
void SpinSystem(int length, double temp, int nsamples)
: L(length)
, Temp(temp)
, NMmuestras(nsamples)
{
s.resize(L*L);
Cluster.resize(L*L*2);
}
};

这里我创建了相同总大小的一维数组。我强烈建议您只这样做,并根据需要使用一个简单的函数来转换索引。但如果您不喜欢那样,您可以随时使用嵌套 vector 。

确保在您的实际代码中初始化 E、M 和 Write...最好是内联或在初始化列表中。

关于c++ - 私有(private)变量依赖于未指定的私有(private)变量(C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45844372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com