-6

我有一个项目,Class1其公共功能tempfunc定义为:

public:
int tempvar;
public:
int tempfunc(int temparg)
{
    if (temparg>0)
    {
        tempvar=temparg;
    }
    return tempvar;
}

现在Class1,首先我调用tempfuncwithtempfunc(500)并设置tempvar=500。当我尝试tempvar在同一个内使用时Class1,它的值不是 500。

其次,在另一个Class2调用tempfuncof之后Class1,我使用以下代码:

int tempvar2=Class1().tempfunc(0);

我预计值为tempvar2500,但它是一些虚拟值。

我应该怎么做才能从执行后获取tempvarin的值。Class2Class1tempfunc

4

1 回答 1

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返回 anint但不返回任何内容。你需要:

int tempfunc(int temparg)
{
    if (temparg>0)
    {
        tempvar=temparg;
    }
    return tempvar;
}
于 2012-12-07T16:24:53.560 回答