C++:静态变量不随静态 set() 函数改变

标签 c++ class static

在阅读了 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/

相关文章:

java - 为什么Java在输入类型是接口(interface),参数类型是实现类的情况下找不到合适的方法呢?

c++ - GCC 部分属性在模板化函数中被忽略

python - 如何使用 pybind11 在 C++ 线程中调用 Python 函数作为回调

oop - Excel VBA : Does destroying a collection of objects destroy every single object?

jquery - 两个(类)和(类)之间平滑过渡 :hover

C# 静态属性,被多次初始化

java - java中静态方法的调用是如何解决的?

C++构造模板类型静态Lambda成员

javascript - 省略一些 C++ 子系统

C++ 模板和继承