728x90
반응형
-
C++
에서 클래스 멤버 함수를 작성할 때, 멤버 변수와 함수 매개변수의 이름을 동일하게 정의하는 경우 흔히 발생하는 문제가 있습니다. 다음과 같은 코드를 예로 들어 보겠습니다: -
cpp
class SpreadsheetCell { public: void setValue(double value); private: double value; }; void SpreadsheetCell::setValue(double value) { value = value; // 모호함! }
- 이 코드는 컴파일 자체는 문제없이 정상적으로 수행됩니다.
- 그러나 실행 시 의도한 대로 멤버 변수
value
의 값이 설정되지 않는 문제를 발생시킵니다.
- 그 이유는 함수 내에서
value = value;
라는 코드는 함수의 매개변수value
에 자기 자신을 대입하는 코드로 처리되기 때문입니다. - 결국 클래스의 멤버 변수는 전혀 변경되지 않고, 여전히 초기화되지 않은 상태(쓰레기 값 또는 불확정 값)를 유지하게 됩니다.
- 1.1.
this
포인터 사용- 멤버 변수를 지칭할 때
this->
를 사용하면 명확하게 멤버 변수임을 구분할 수 있습니다. -
cpp
void SpreadsheetCell::setValue(double value) { this->value = value; // 멤버 변수에 매개변수 값 대입 }
- 멤버 변수를 지칭할 때
- 1.2. 명명 규칙을 통해 구분
- 멤버 변수에는 접두어(예:
mValue
)를 붙여 매개변수와 이름이 충돌하지 않도록 하는 방법도 많이 사용합니다. -
cpp
class SpreadsheetCell { public: void setValue(double value); private: double mValue; // 멤버 변수는 m 접두사 사용 }; void SpreadsheetCell::setValue(double value) { mValue = value; }
- 멤버 변수에는 접두어(예:
- 멤버 함수 작성 시 멤버 변수와 매개변수 이름이 동일할 경우, 멤버 변수가 아닌 매개변수가 우선 참조되어 의도와 다른 동작을 하게 됩니다.
- 따라서
this->
키워드를 통해 명확히 멤버 변수를 지칭하거나, 멤버 변수의 이름에 접두사를 붙여 구분하는 것이 좋은 습관입니다.
- 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
728x90
반응형
'C C++' 카테고리의 다른 글
C++ 문자열(string)을 실수형 double로 변환하는 다양한 방법 (0) | 2025.03.20 |
---|---|
C++ 컴파일러의 최대 잘라먹기(Maximal Munch) 원칙과 주의할 사례 (0) | 2025.03.20 |
C++ float/double 특수값과 std::to_string() 처리 방식 (0) | 2025.03.20 |
C++ 멤버 함수(member function)에서 const의 의미와 차이점 (0) | 2025.03.20 |
Visual C++ 메모리 누수(momory leaking) 탐지 방안 (0) | 2025.03.20 |