如何使函数变量 public,它们不在 class C++ 中
How to make functions variables public, they are not in a class C++
我想知道如何将一个函数的变量 public 赋给其他函数。
示例:
void InHere
{
int one = 1; // I want to be public
}
int main()
{
InHere(); // This will set int one = 1
one = 2; // If the variable is public, I should be able to do this
return 0;
}
有人知道怎么做吗?我在搜索时唯一找到的是 classes,因为你可以看到 class 中什么也没有,我不希望它们在一个中。
非常感谢任何帮助!
只需将变量设置为全局变量即可。然后你可以从其他功能访问它。
int one;
void InHere()
{
one = 1; // I want to be public
}
int main()
{
InHere(); // This will set int one = 1
one = 2; // If the variable is public, I should be able to do this
return 0;
}
如果你想在 class 中使用它,请尝试下面的代码
#include <iostream>
using namespace std;
class My_class
{
// private members
public: // public section
// public members, methods or attributes
int one;
void InHere();
};
void My_class::InHere()
{
one = 1; // it is public now
}
int main()
{
My_class obj;
obj.InHere(); // This will set one = 1
cout<<obj.one;
obj.one = 2; // If the variable is public, I should be able to do this
cout<<obj.one;
return 0;
}
一个函数局部定义的变量通常在该函数之外是不可访问的,除非该函数显式地为该变量提供一个 reference/pointer。
一个选项是让函数显式return向调用者提供指向该变量的引用或指针。如果变量不是 static
,那将给出未定义的行为,因为它在函数 returns.
之后不存在
int &InHere()
{
static int one = 1;
return one;
}
void some_other_func()
{
InHere() = 2;
}
如果变量 one
不是 static
,这将导致未定义的行为,因为在这种情况下,变量仅在调用 InHere()
时才存在,并且不再存在returns(所以调用者收到一个悬空引用——对不再存在的东西的引用)。
另一个选项是函数将变量的指针或引用作为参数传递给另一个函数。
void do_something(int &variable)
{
variable = 2;
}
int InHere()
{
int one = 1;
do_something(one);
std::cout << one << '\n'; // will print 2
}
缺点是这只提供对 InHere()
调用的函数的访问。虽然在这种情况下变量不需要是 static
,但变量仍然作为函数 returns 不复存在(所以如果你想以某种方式组合选项 1 和选项 2,变量需要 static
)
第三个选项是在文件范围内定义变量,因此它具有静态存储持续时间(即它的生命周期与函数无关);
int one;
void InHere()
{
one = 1;
}
void another_function()
{
one = 2;
}
int main()
{
InHere();
// one has value 1
some_other_function();
// one has value 2
}
可以在任何具有变量声明可见性的函数中访问全局变量。例如,我们可以做
extern int one; // declaration but not definition of one
int one; // definition of one. This can only appear ONCE into the entire program
void InHere()
{
one = 1;
}
并且,在其他源文件中
extern int one; // this provides visibility to one but relies on it
// being defined in another source file
void another_function()
{
one = 2;
}
int main()
{
InHere();
// one has value 1
some_other_function();
// one has value 2
}
不过要小心 - global/static 变量有很多缺点,在某种程度上它们通常被认为是非常糟糕的编程技术。查看 this link(以及从那里链接到的页面)以了解一些问题的描述。
我想知道如何将一个函数的变量 public 赋给其他函数。
示例:
void InHere
{
int one = 1; // I want to be public
}
int main()
{
InHere(); // This will set int one = 1
one = 2; // If the variable is public, I should be able to do this
return 0;
}
有人知道怎么做吗?我在搜索时唯一找到的是 classes,因为你可以看到 class 中什么也没有,我不希望它们在一个中。
非常感谢任何帮助!
只需将变量设置为全局变量即可。然后你可以从其他功能访问它。
int one;
void InHere()
{
one = 1; // I want to be public
}
int main()
{
InHere(); // This will set int one = 1
one = 2; // If the variable is public, I should be able to do this
return 0;
}
如果你想在 class 中使用它,请尝试下面的代码
#include <iostream>
using namespace std;
class My_class
{
// private members
public: // public section
// public members, methods or attributes
int one;
void InHere();
};
void My_class::InHere()
{
one = 1; // it is public now
}
int main()
{
My_class obj;
obj.InHere(); // This will set one = 1
cout<<obj.one;
obj.one = 2; // If the variable is public, I should be able to do this
cout<<obj.one;
return 0;
}
一个函数局部定义的变量通常在该函数之外是不可访问的,除非该函数显式地为该变量提供一个 reference/pointer。
一个选项是让函数显式return向调用者提供指向该变量的引用或指针。如果变量不是 static
,那将给出未定义的行为,因为它在函数 returns.
int &InHere()
{
static int one = 1;
return one;
}
void some_other_func()
{
InHere() = 2;
}
如果变量 one
不是 static
,这将导致未定义的行为,因为在这种情况下,变量仅在调用 InHere()
时才存在,并且不再存在returns(所以调用者收到一个悬空引用——对不再存在的东西的引用)。
另一个选项是函数将变量的指针或引用作为参数传递给另一个函数。
void do_something(int &variable)
{
variable = 2;
}
int InHere()
{
int one = 1;
do_something(one);
std::cout << one << '\n'; // will print 2
}
缺点是这只提供对 InHere()
调用的函数的访问。虽然在这种情况下变量不需要是 static
,但变量仍然作为函数 returns 不复存在(所以如果你想以某种方式组合选项 1 和选项 2,变量需要 static
)
第三个选项是在文件范围内定义变量,因此它具有静态存储持续时间(即它的生命周期与函数无关);
int one;
void InHere()
{
one = 1;
}
void another_function()
{
one = 2;
}
int main()
{
InHere();
// one has value 1
some_other_function();
// one has value 2
}
可以在任何具有变量声明可见性的函数中访问全局变量。例如,我们可以做
extern int one; // declaration but not definition of one
int one; // definition of one. This can only appear ONCE into the entire program
void InHere()
{
one = 1;
}
并且,在其他源文件中
extern int one; // this provides visibility to one but relies on it
// being defined in another source file
void another_function()
{
one = 2;
}
int main()
{
InHere();
// one has value 1
some_other_function();
// one has value 2
}
不过要小心 - global/static 变量有很多缺点,在某种程度上它们通常被认为是非常糟糕的编程技术。查看 this link(以及从那里链接到的页面)以了解一些问题的描述。