상수 멤버 함수와 this
1
2
3
4
void print() const
{
x = 20;
}
- 함수 선언 및 구현시 “함수 괄호 () 뒤에 const 가 붙는 함수”
- void print() const
- 상수 멤버 함수 안에서는 “모든 멤버를 상수 취급”
- 멤버 데이터의 값을 읽을 수는 있지만 “변경할 수 는 없다”
- 상수 멤버 함수를 사용하는 “중요한 이유”
- 코드 작성시 안정성
- 상수 객체는 상수 멤버 함수만 호출 할 수 있다.
- 상수 객체는 상수 멤버 함수만 호출할 수 있다.
- 상수 객체의 상태를 변경할 수 없다. 하지만 “상태를 얻거나 출력 할 수는 있어야” 한다.
- 사용자 정의 타입을 함수로 전달할 때 call by value 보다는 const reference 가 좋다. (call by value면 메모리가 한번 더 잡히니까)
- 객체의 상태를 변경하지 않은 모든 멤버 함수는 반드시 상수 멤버 함수로 만들어야 한다.
- “mutable” 멤버 데이터
- 상수 멤버 함수 안에서도 값을 변경할 수 있다.
- 동일 이름의 상수 멤버 함수와 비 상수 멤버 함수를 만들 수 있다.
- 상수 멤버 함수 안에서 “모든 멤버는 const”이다.
- 함수 선언과 구현으로 분리할 때는 “선언과 구현 모두에 const를 표기”해야 한다.
- this
- 멤버 함수 안에서 사용가능한 “키워드”
- 자신을 호출한 “객체의 주소”를 담고 있다.
- 이름 충돌시
- 멤버 이름과 지역변수의 이름이 동일할 때 지역변수가 우선시 된다.
- this를 사용하면 멤버에 접근할 수 있다.
- this를 반환하는 함수
- this 또는 *this를 반환하면 “멤버 함수를 연속적으로 호출”할 수 있다.
- cout의 원리
- this 포인터 주의 사항
- 정적 멤버 함수 안에서는 “this를 사용할 수 없다.”