我为发布这样一个基本问题而道歉,但我找不到一个合适的答案,说明为什么这不起作用,以及如何让它发挥作用。
我在这里简化了我的问题:
#include <iostream>
using namespace std;
class A {
public:
int x;
};
void otherFunction() {
A A;
cout<<"X: "<<A.x<<endl;
}
int main(){
A A;
A.x = 5;
otherFunction();
return 0;
}
构建后,班级成员是否会变得不变?
如何扩展对课程所做的更改范围?
结构受限于这种方式吗?
提前感谢您的回答。
答案 0 :(得分:3)
您未获得预期的输出,因为在otherFunction()
中您正在创建一个类型A的新对象,而您之前尚未为其指定值!
在C ++中阅读scope of a variable以了解更多信息
尝试运行下面给出的代码,你应该得到输出为5。
#include <iostream>
using namespace std;
class A {
public:
int x;
};
void otherFunction(A a) {
cout << "X: " << a.x << endl;
}
int main(){
A a;
a.x = 5;
otherFunction(a);
return 0;
}
或者你可以这样做,这在OOP中被认为是一种很好的做法
class A{
private:
int x;
public:
void update(int newx){
x = newx;
}
int getX(){
return x;
}
};
int main(){
A a;
a.update(5);
cout << a.getX() << endl;
return 0;
}
答案 1 :(得分:0)
它正在做它应该做的事情。
您正在函数otherFunction
内创建一个新对象,这个新对象将是函数的本地对象。
在main中调用函数otherFunction
后打印A.x的值,您将看到A.x的值已更改。
答案 2 :(得分:0)
A
中的变量main
与A
中的变量otherFunction
不同,因此它们不会具有相同的值。
授予otherFunction
访问main A
值的一种方法是将其作为参数传递。例如:
void otherFunction(A p) {
cout<<"X: "<<p.x<<endl;
}
int main(){
A a;
a.x = 5;
otherFunction(a);
return 0;
}
我已经更改了变量的名称,使其更加清晰。 a
位于主要位置,a
的副本传递到otherFunction
。该副本在p
中称为otherFunction
。 otherFunction
向p
发出的内容不会对a
造成任何更改。如果您想这样做,则需要通过引用传递,这可能是一个更进一步的话题比你现在。