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 << "Insert filename:" << endl; cin >> nomefile; cout << endl; cout << nomefile << endl; cout << endl; int M = 0; int nmax = 50; ifstream f; f.open(nomefile); while (M < nmax) { f >> measure_set[M]; if (f.eof()) break; M++; } f.close(); N = M + 1; cout << "Insert temperature:" << endl; cin >> T; cout << endl; }</code>
온도 값(T)이 의도한 T 대신 Measure_set 배열(measure_set[0])의 첫 번째 요소에 저장되는 것을 확인했습니다. 변수.
해결 방법
이는 C에서 동일한 이름을 가진 변수를 다른 범위에서 선언하는 것을 허용하기 때문에 발생합니다. 이 경우 get 메소드에 선언된 T 변수는 클래스 멤버 변수 T를 섀도잉합니다.
섀도잉을 방지하려면 변수에 다른 이름을 사용하거나 범위 확인 연산자(::)를 사용하여 명시적으로 클래스 멤버 변수를 참조하세요.
get 메서드에서 온도 변수에 다른 이름을 사용하는 것은 다음과 같습니다.
<code class="cpp">void Measure::get() { cout << "Insert filename:" << endl; cin >> nomefile; cout << endl; cout << nomefile << endl; cout << endl; int M = 0; int nmax = 50; ifstream f; f.open(nomefile); while (M < nmax) { f >> measure_set[M]; if (f.eof()) break; M++; } f.close(); N = M + 1; cout << "Insert temperature:" << endl; double temperature; // Use a different name for the temperature variable cin >> temperature; T = temperature; cout << endl; }</code>
범위 확인 연산자를 사용하여 클래스를 명시적으로 참조합니다. 멤버 변수는 다음과 같습니다:
<code class="cpp">void Measure::get() { cout << "Insert filename:" << endl; cin >> nomefile; cout << endl; cout << nomefile << endl; cout << endl; int M = 0; int nmax = 50; ifstream f; f.open(nomefile); while (M < nmax) { f >> measure_set[M]; if (f.eof()) break; M++; } f.close(); N = M + 1; cout << "Insert temperature:" << endl; cin >> this->T; // Use the scope resolution operator to refer to the class member variable cout << endl; }</code>
위 내용은 ## C 클래스에서 의도한 변수 대신 온도 값이 배열에 저장되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!