C 中的遮蔽變數
在物件導向程式設計中,當類別中定義的變數與變數同名時,就會發生遮蔽在外部範圍內。這可能會導致意外的行為,因為內部變數優先於外部變數。
問題:類別中的遮蔽
考慮以下類別定義:
<code class="cpp">class Measure { int N; double measure_set[]; char nomefile[]; double T; public: void get( ); void printall( ); double mean( ); double thermal_comp( ); };</code>
此類中的get 方法旨在從檔案中讀取取值並將其保存在measure_set數組中,以及讀取溫度值並將其儲存在T變數中。
但是,當您如下實作get 方法:
<code class="cpp">void Measure::get() { cout > nomefile; cout > measure_set[M]; if (f.eof()) break; M++; } f.close(); N = M + 1; cout > T; cout <p>您注意到溫度值(T) 儲存在measure_set 陣列(measure_set[0]) 的第一個元素中,而不是預期的T </p> <p><strong>解</strong></p> <p>出現這種情況是因為C允許在不同的作用域中聲明同名的變數。在這種情況下,在 get 方法中宣告的 T 變數會遮蔽類別成員變數 T。 </p> <p>為了避免遮蔽,您可以為變數使用不同的名稱,或使用作用域解析運算子 (::) 明確地引用類別成員變數。 </p> <p>在get 方法中為溫度變數使用不同的名稱將如下所示:</p> <pre class="brush:php;toolbar:false"><code class="cpp">void Measure::get() { cout > nomefile; cout > measure_set[M]; if (f.eof()) break; M++; } f.close(); N = M + 1; cout > temperature; T = temperature; cout <p>使用範圍解析運算子明確引用類別成員變數看起來像這樣:</p> <pre class="brush:php;toolbar:false"><code class="cpp">void Measure::get() { cout > nomefile; cout > measure_set[M]; if (f.eof()) break; M++; } f.close(); N = M + 1; cout > this->T; // Use the scope resolution operator to refer to the class member variable cout </code>
以上是## 為什麼我的溫度值儲存在陣列中,而不是 C 類別中的預期變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!