クラス内の変数のシャドウイング: 難問
この調査は、クラス内で定義された変数の動作を中心にしています。次の Measure という名前のクラスについて考えてみましょう:
<code class="c++">class Measure { int N; double measure_set[]; char nomefile[]; double T; // ... };</code>
目的は、.dat ファイルからデータを meter_set 配列に読み取り、ユーザー入力を T 変数に読み取る get メソッドを実装することです。ただし、提供された実装では、T 値をmeasure_set[0] に格納しているようです。
シャドウイングについて
C では、同じ名前の変数を宣言することができます。さまざまな範囲で。これはシャドウイングとして知られています。コンパイラは各変数をそれぞれのスコープに関連付けます。そのスコープ内では、変数のローカル定義が同じ名前の他の宣言よりも優先されます。
提供されたコードでは、T 変数は両方のメンバーとして定義されています。 Measure クラスの変数として、また get メソッド内のローカル変数として使用されます。メソッド内で T メンバー変数を取得しようとすると、代わりにローカル変数 debido にアクセスしてシャドウイングします。
シャドウイングの回避
この問題を解決するには、次のことが必要です。異なるスコープ内の変数に一意の名前を使用することでシャドウイングを回避します。一般的な規則は、メンバー変数の前に「m_」や「this_」などの適切な識別子を付けることです。これにより、同じ名前のローカル変数とは区別されます。
たとえば、次の変更されたコードでは、メンバー変数に「_m」プレフィックスを使用します。
<code class="c++">void Measure::get() { // ... cout << "Insert temperature:" << endl; cin >> m_T; // ... }</code>
追加考慮事項
以上が## シャドーイングは C のクラス内の変数アクセスにどのような影響を与えるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。