-6

次のように定義されClass1たパブリック関数を持つプロジェクトがあります。tempfunc

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

ではClass1、まず を呼び出しtempfunctempfunc(500)を設定しますtempvar=500tempvar同じ 内で使用しようとするとClass1、その値は 500 ではありません。

次に、Class2が呼び出された後tempfuncに呼び出される別Class1のコードでは、次のコードを使用します。

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

の値は 500 になると予想していますtempvar2が、ダミーの値です。

が実行された後にtempvarinの値を取得するにはどうすればよいですか。Class2Class1tempfunc

4

1 に答える 1

4

私は私の超能力を使って、あなたが何を間違っているのかを理解しようとします. (2番目の質問であなたが言ったことから)次のようなことをしていると思います:

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タイプのオブジェクトはwillです。

上記のコードではClass1()、タイプのオブジェクトを作成しますが、Class1名前がなく一時的なものです。つまり、行の最後で破棄されます。その一時オブジェクトを呼び出しtempfunc(5)て、そのtempメンバー変数を 5 に設定しています。しかし、それは破棄されます。次の行では、別の新しいClass1オブジェクトを作成して呼び出しますsomeOtherFunctionが、このオブジェクトにはtempメンバーが 5 に設定されておらず、初期化されていない任意の変数が含まれているだけです (これは 2 番目の質問に答えます)。

両方の関数に同じタイプのオブジェクトを使用する場合は、次のClass1ようにする必要があります。

Class1 obj;
obj.tempfunc(5);
obj.someOtherFunction();

これにより、 type のオブジェクトが作成され、 というClass1名前が付けられobjます。次に、その名前付きオブジェクトで関数を呼び出すことができます。


編集後: を返すと宣言tempfuncしますintが、何も返しません。必要なもの:

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