1. 상수 멤버 함수는 멤버 변수를 변경시키지 않는 멤버 함수를 나타내는 것으로,


(반환형) (함수이름)(함수인자) const { 구현 } 이런 식으로 인자와 구현 사이에 const 키워드를 넣는다.




2. 상수 함수가 필요한 이유


상수 객체는 상수 함수만 부를 수 있기 때문이다.



만일 Line 8에서 print() 함수에 const 키워드가 없다면 "error: passing 'const Point' as 'this' argument discards qualifiers [-fpermissive]" 이란 에러가 나게 된다.

이는 미리 컴파일 된 소스에 헤더만 가지고 가져다 쓸 경우, 멤버 함수 선언부에 const 가 없다면 컴파일러가 체크할 수 없기 때문이다.



3. 변수를 함수 인자로 전달할 때, 일반 변수로 전달한다면 앞에서 본 대로 복사생성자가 불리게 된다.


클래스의 경우는 성능 저하가 크게 되므로, 값을 변화시키지 않고 전달하려면 const 참조를 통해 전달하는 것이 일반적이다.


이때 const 참조로 가져온 변수는 멤버 함수 중에 상수 멤버 함수만 실행할 수 있고, 

따라서 성능 향상을 위해 const 참조로 인자를 전달하기 위해선 멤버값을 변화시키지 않는 함수는 상수 멤버 함수로 구현해야 한다.




4. 상수 멤버 함수에서는 모든 것이 const 취급이기에, 참조 return도 되지 않고 const 참조만 리턴할 수 있다.


5. 이름이 같은 함수를 const 버전과 일반 버전 둘 모두 제공할 수 있다.


이때 객체가 상수면 상수 멤버함수를, 상수가 아니면 일반 함수를 부르게 된다.


이 경우는 컴파일러에서 이름을 다르게 붙이는 오버로딩과 달리 이름도 같게 된다.




'프로그래밍 > C++' 카테고리의 다른 글

연산자 재정의 (Operator overloading)  (0) 2018.07.01
this 포인터  (0) 2017.11.13
정적 멤버 함수 (Static member function)  (0) 2017.11.13
정적 멤버 변수 (Static member variable)  (0) 2017.11.13
복사 생성자  (0) 2017.11.09

+ Recent posts