我可以使用C ++中的指针更改静态类成员变量的值吗?

时间:2018-07-18 02:07:11

标签: c++ class pointers

我试图通过类内函数返回指向main的指针来更改静态类成员变量的值-脚本无法正常工作,并且我尝试了一些其他操作,因此我决定寻求帮助。有什么想法或更有效的方式来做我想做的事吗?

#include <iostream>

using namespace std;

class container
{
public:
    int accstatint()
    {
        int *ptr=&container::statint;
        return *ptr;
    }
private:
    static int statint;
};
int container::statint=0;

int addone(int *n)
{
    return *n++;
}

int main()
{
    container obj;
    int *ptr=obj.accstatint();
    addone(*ptr);
    cout<<*ptr;
}

2 个答案:

答案 0 :(得分:3)

int accstatint()
{
    int *ptr=&container::statint;
    return *ptr;
}

这将返回int的副本,这意味着您无法对其进行修改。您需要返回对int的引用(或指针):

int& getStatInt() const { return container::statint; }

如果您确实要使用指针,可以使用它(但是没有优势,您应该更喜欢使用引用):

int* getStatIntP() { return &container::statint; }

现在您可以更新整数:

int main()
{
    container c;
    std::cout << c.getStatInt() << "\n"; // 0
    auto& ref = c.getStatInt();
    ref += 2;
    std::cout << c.getStatInt() << "\n"; //2
}

但是所有这些都引出了一个问题:为什么您需要一个类的对象来对此进行修改?为什么不只是public?我的意思是任何人都可以通过您的类进行修改,所以为什么不直接允许直接访问int进行修改。如果这样做,那么它的目的是什么?您可能想要在类中使用static int来跟踪构造了多少个该类的实例,但是您不允许外部访问它。在不知道自己要做什么的情况下,我无法为您提供帮助,您需要考虑一下自己的班级和班级。

答案 1 :(得分:1)

一个简单的包装器功能可以工作:

int& acc_staticint() { return staticint; }

您可以创建一个getter和setter方法,或者,由于您无论如何都有效地创建了变量public,因此您可以这样做,然后引用container::staticint