• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

[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를 쓰지않으면 생기는 문제를 조금만 자세히 적어주시면 정말 감사합니다

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2022.08.08

음..

[1]의 경우, const 멤버 함수는

멤버 변수의 값을 수정하지 않겠다는 의미로 사용하는 것이 더 큽니다.

m_cents의 값을 변경하지 않겠다는 의미이지요.

 

아마 다른 용도로 사용되는 const와 헷갈리신 것이 아닌가 생각해봅니다.

음.. const의 의미가 총 두가지로 배웠는데 조금더 공부해볼게요!

그런데 질문1. 의 답변도 해주실수 없으실까요? 그냥 const삭제해버리면

아래 [2]함수 하나로 모든걸 다 처리할수 있는데 왜 굳이 [1]을 추가한건가요?

결국 [2] 안에서도 m_cents 값 바꿀수있으니 [1]은 의미가 없다고봐야하는거 아닌가요?

[2]

int& getCents()
{ return m_cents;}