0

これが機能するかどうか、そしてどのように機能するのか疑問に思います:

class sample
{
 int i;
 int func1()
  {
   int i = 0;
   i++;
   return i;
  }
}

私が尋ねる理由は、私には多くのメンバー関数と悪い名前の慣習があるからです。

4

6 に答える 6

2

クラスメンバーを非表示にint i = 0するという新しい変数を作成していると言うとき。iクラスにアクセスしたい場合はi、を行うことができますthis->i。しかし、そもそもそのような混乱を引き起こさない方が通常は良いでしょう。

于 2013-03-19T18:39:11.963 に答える
1

の本文内でfunc1、ローカルで宣言されたを参照しint iます。thisクラスメンバーを参照するには、ポインターを使用して明示的に参照する必要があります。

this->i

this現在のインスタンスを表すためにクラス内のすべてのメソッドに渡されるconstポインターです。staticもちろんメンバー機能がある場合は渡されません。

ローカルで宣言されたものが最初に使用される理由は、およびとint i同じスコープ内にあるためです。i++return i

于 2013-03-19T18:39:20.480 に答える
0

正常に動作します。関数内での名前の使用はすべて、その関数内で宣言されiたものを参照します。iつまり、関数は毎回1を返します。

于 2013-03-19T18:39:04.790 に答える
0

戻り値は、実際にはiin で宣言されたを参照しfunc1()ます。それはすべてスコープに関するものです。

スコープは で始まり、{で終わり}ます。スコープ内で宣言されたすべての変数は、スコープ内にいる限り、または別のスコープに入った場合にのみ定義されます。したがって

{ int i = 0; { int i = 1; { int i = 2; }}}

完全に可能です。スコープの 1 つで使用する場合iは、常にi同じスコープで を参照します。iより高いスコープのを参照することは、より困難です。

あなたの例では、iを使用してトップを参照できますthis->i。ここthisで、 は作業中のオブジェクトへのポインターです。詳細はこちら(少し下にスクロール)。

于 2013-03-19T18:50:58.533 に答える
0

func1() 内の i の意図は何ですか。関数の外側の i または内側の i をインクリメントしますか。外側の i をインクリメントしたい場合、これは機能しません。

于 2013-03-19T18:40:46.417 に答える
0

スコープで奇妙なことが起こります:

int func1()
{
    int i = 0;
    i++;
    { //1
        int i = 41;
        i++;
    }
    { //2
        int j = i + 1;
        cout << j << endl // this prints 2
    }
    return i;
}

スコープ内で変数を使用するときの規則は、常に最もローカルなスコープを最初に参照し、それを上に移動することです。したがって、あなたの例では、関数内はクラス内iを参照しません。i

于 2013-03-19T18:42:36.867 に答える