gpt4 book ai didi

c++ - 静态函数和类变量?

转载 作者:行者123 更新时间:2023-11-30 03:53:01 25 4
gpt4 key购买 nike

我已将我的问题分解为一个简单的小程序。

我有一个类 myclass 我在单独的 .cpp 文件“classes.cpp”中创建并在头文件“classes.h”中声明。 myclass 包含一个变量 a,它在实例化时被初始化。这使得变量 a = 5

我的总体目标是在单独的 .cpp 文件中创建一个类,该文件在 .h 文件中声明,我可以在我的 main() 程序中创建多个实例。我遇到的问题是这个。

在我的 main() 函数中,我创建了一个名为 firstmyclass 实例。我的主程序显示变量 a 设置为数字 5。如果我想使用静态函数更改该数字(并且它必须是静态函数,因为这涉及到我正在编写的另一个程序中更大的东西)。我直接调用静态函数,并在该 static_function 中创建 myclass 的实例并调用 non_static_function,因为静态函数没有将它们连接到对象的隐式“this”。

在我的 non_static_function 中,我将值更改为数字 8。问题是当我希望它为 8 时,“first”中的变量“a”的值仍然为 5。我需要使用 first->static_function(8) 而不是 first->a = 8。 .我该怎么做?

代码如下:

**main.cpp**
#include <iostream>
#include "classes.h"

using namespace std;

int main()
{

myclass *first = new myclass();
cout << "Myclass variable a is = " << first->a << endl;

first->static_function(8); // trying to change myclass variable 'a' to 8.

cout << "But" << endl;
cout << "the actual value of a is still: " << first->a << endl;
}

**classes.h**
#ifndef CLASSES_H_INCLUDED
#define CLASSES_H_INCLUDED
class myclass
{
public:
int a;
myclass();

void non_static_function(int x);
static void static_function(int x);

};
#endif // CLASSES_H_INCLUDED

**classes.cpp**
#include <iostream>
#include <cstdlib>
#include "classes.h"

using namespace std;

myclass::myclass()
{
a = 5;
}

void myclass::non_static_function(int x)
{
a = x;
cout << "The value for variable 'a' was 5 but is now: " << a << endl;
}

void myclass::static_function(int x)
{
myclass *p = new myclass();
p->non_static_function(x);
}

最佳答案

如果你想让 myclass 的每个实例都有自己的 a 并且你想调用一个静态函数来改变它那么你需要传递你想要改变的实例到静态函数。静态函数只能修改类的静态成员或在其范围内的实例的成员。非静态成员函数可以更改作为类成员的任何变量。

class Foo
{
private:
int bar;
public:
static void static_function(int value, Foo & foo) { foo.bar = value; }
void non_static_function(int value) { bar = value; }
};

int main()
{
Foo foo;
Foo::static_function(8, foo);
// now bar will have the value of 8
foo.non_static_function(20);
// now bar will have the value of 20
}

关于c++ - 静态函数和类变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30347376/

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