클래스의 변수 음영 처리: 수수께끼
이 질문은 클래스 내에 정의된 변수의 동작을 중심으로 합니다. Measure라는 다음 클래스를 생각해 보세요.
<code class="c++">class Measure { int N; double measure_set[]; char nomefile[]; double T; // ... };</code>
목표는 .dat 파일의 데이터를 Measure_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 중국어 웹사이트의 기타 관련 기사를 참조하세요!