在阅读了 StackOverflow 的讨论并实现了一些建议之后,我编写了这些代码片段,目的只是为了测试类的静态成员的行为。 这是 header ,其中包含类声明:
class OurClass
{
private:
static int x, y;
public:
static void setVals(int valx, int valy);
static int getValx();
static int getValy();
static void initialize();
};
这是 cpp 文件,其中包含这些成员的定义以及 main() 函数:
#include <iostream>
#include "OurClass.hpp"
using namespace std;
void OurClass::initialize()
{
static int x = 0;
static int y = 0;
}
void OurClass::setVals(int valx, int valy)
{
static int x = valx;
static int y = valy;
}
int OurClass::getValx()
{
static int x;
return x;
}
int OurClass::getValy()
{
static int y;
return y;
}
int main(void)
{
OurClass::inicializa();
cout << "Provide x and y..." << endl;
OurClass::setVals(cin.get(), cin.get());
cout << "Value of x: " << OurClass::getValx() << endl;
cout << "Value of y: " << OurClass::getValy() << endl;
return 0;
}
因此,假设该类存在一个静态变量,并且静态函数只访问静态变量,我希望 x 和 y 具有我们在 main( ).但是当在 cout 中打印它们的值时,它们仍然具有我们在 initialize() 函数中分配的值(顺便说一句,这是我在这里得到的另一个建议,即在方法中初始化静态变量)。 我也无法通过 OurClass::x 或 y 直接引用变量,即使我将它们公开。 你们知道为什么吗?
最佳答案
首先,您需要访问本地类的静态变量,而不是在每个方法中声明新的方法局部变量。检查下面。
class Out {
private:
static int x, y;
public:
void set(int x, int y);
int getSum();
};
int Out::x = 0;
int Out::y = 0;
void Out::set(int x, int y) {
Out::x = x;
Out::y = y;
}
int Out::getSum() {
return Out::x + Out::y;
}
关于C++:静态变量不随静态 set() 函数改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49668940/