我有一个Class1
项目,公共职能tempfunc
定义为:
public:
int tempvar;
public:
int tempfunc(int temparg)
{
if (temparg>0)
{
tempvar=temparg;
}
return tempvar;
}
现在在Class1
,我首先使用tempfunc
致电tempfunc(500)
并设置tempvar=500
。我尝试在同一tempvar
内使用Class1
时,其值不是500。
其次,在调用Class2
的{{1}}之后调用的另一个tempfunc
中,我使用以下代码:
Class1
我希望int tempvar2=Class1().tempfunc(0);
的值为500但是它的虚拟值。
执行tempvar2
后,我应该如何从tempvar
Class2
获取Class1
的值。
答案 0 :(得分:4)
我将利用我的精神力量,并试图弄清楚你做错了什么。我猜(从你在第二个问题中说过的话)你做的是这样的事情:
class Class1
{
public:
int temp;
void tempfunc(int x) { temp = x; }
void someOtherFunction() { std::cout << temp << std::endl; }
};
int main()
{
Class1().tempfunc(5);
Class1().someOtherFunction(); // Prints some garbage value, not 5
}
现在我将解释为什么这不起作用。类是对该类类型的对象的描述。该类本身没有int
对象(它只是一个描述),但Class1
类型的对象将。
现在,在我上面给出的代码中,Class1()
创建了一个Class1
类型的对象,但它是未命名的和临时的,这意味着它将在行尾被销毁。我们在该临时对象上调用tempfunc(5)
,将其temp
成员变量设置为5.但随后它被销毁。在下一行中,我们创建另一个新的Class1
对象并在其上调用someOtherFunction
- 但是此对象没有temp
}成员设置为5,它只有一些任意未初始化的变量(这回答了你的第二个问题)。
如果要对两个函数使用类型Class1
的同一对象,则需要执行以下操作:
Class1 obj;
obj.tempfunc(5);
obj.someOtherFunction();
这会创建一个Class1
类型的对象,并将其命名为obj
。然后我们可以调用该命名对象上的函数。
修改后:您声明tempfunc
返回int
但不返回任何内容。你需要:
int tempfunc(int temparg)
{
if (temparg>0)
{
tempvar=temparg;
}
return tempvar;
}