-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
[1:55] int getCents() vs int& getCents() 문의
22.08.07 11:34 작성 조회수 180
1
핵심부분만 발췌해서 적으면,
[1]
int getCents() const
{ return m_cents;}
[2]
int& getCents()
{ return m_cents;}
[3]
void operator + (const Cents& c1, const Cents& c2)
{ cout << c1.getCents() + c2.getCents(); }
[4]
int main()
{ cout << cents1.getCents() << endl;}
-------------------------------
기본이해된부분 -이해가 맞을까요?)
① [1] 은 객체가 const로 생성되었을시 const가 붙은 멤버함수만 사용할 수 있고, [3]은 매개변수로 const 객체 c1을 받아들였으므로 [1]의 함수를 호출.
② [2] 의 함수는 일반 객체가 들어왔을시 호출되며 m_cents의 참조를 반환, 따라서 [4]의 cents1.getCents()의 주소는 동일함.
-------------------------------
질문 1.
[3]의 기본연산자에서 굳이 매개변수로 const를 뭐하러 받나요 ? 제가알기로 함수의 매개변수로 const참조를 쓰는 가장큰이유는 r-value도 참조할 수 있기 때문인데, 이경우에는 클래스 객체를 받아오므로 상수일 일도 없지않나요? const 매개변수를 쓰지않으면 더이상 [1]의 const 멤버함수도 필요 없지 않나요??(정말.. 오래 고민하다 해결되지 않아 적어서 ㅠㅠ 조금만 자세히 설명해주시면 정말 감사해요 ㅠㅠ)
위 코드에서 const를 쓰지않으면 생기는 문제를 조금만 자세히 적어주시면 정말 감사합니다
답변을 작성해보세요.
0
강민철
2022.08.08
음..
[1]의 경우, const 멤버 함수는
멤버 변수의 값을 수정하지 않겠다는 의미로 사용하는 것이 더 큽니다.
m_cents의 값을 변경하지 않겠다는 의미이지요.
아마 다른 용도로 사용되는 const와 헷갈리신 것이 아닌가 생각해봅니다.
Hyungjune Choi
질문자2022.08.08
음.. const의 의미가 총 두가지로 배웠는데 조금더 공부해볼게요!
그런데 질문1. 의 답변도 해주실수 없으실까요? 그냥 const삭제해버리면
아래 [2]함수 하나로 모든걸 다 처리할수 있는데 왜 굳이 [1]을 추가한건가요?
결국 [2] 안에서도 m_cents 값 바꿀수있으니 [1]은 의미가 없다고봐야하는거 아닌가요?
[2]
int& getCents()
{ return m_cents;}
답변 1