类的公共变量,不维护它的值,不能在另一个类中访问

时间:2012-12-07 16:13:38

标签: c++ class public

我有一个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的值。

1 个答案:

答案 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;
}