• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

형변화 오버로딩을 어떤식으로 이해해야 할지모르겠습니다.

23.01.19 16:10 작성 조회수 374

0

형변환 질문.jpg안녕하세요. 9.8 형 변환 강의를 듣던 중 이해가 되지 않는 부분이 있어서 질문합니다.

  1. 19~23줄에 있는 int형 변환 함수에 리턴타입이 없는이유가 궁금합니다.

    함수가 클래스 내부변수에 이미 멤버로 정의가 되어있어서 변수에 접근할 수 있기 때문에 따로 리턴타입을 정의하지 않은건가요?

  2. 19줄 operator int 뒤에 있는 ()의 의미가 궁금합니다. 예를 들어 아래는 9-6 수업 첨자연산자 오버로딩의 예 입니다.

int& operator [] (const int index) { return m_list[index]; }

그런데 이경우는 매개변수도 정의가 되어있고 리턴타입도 정의가 되어있어서 [ ] 안에 값을 넣음으로서 이러한 기능이 작동하는것으로 알고있었습니다.

그런데 19줄은 매개변수가 없어서 int뒤에오는 ()가 매개변수를 담는 ()인지 아니면 위 예에서 [ ]같이 사용되는것인지 모르겠습니다. [ ] 처럼사용되는것이라면

47줄에는 ( )안에 Cents가 아닌 int가 들어가있는데 어째서 정상작동하는것인지 모르겠습니다.

  1. 앞서 1,2번의 궁금증을 해결하기보다는 그냥 오버로딩이 이러한 형식으로 작동하고 47~49줄 처럼 형태는 다르지만 오버로딩을 배우기전 알고있던 기본적인 형변환방식에 모두 적용이된다 라고만 이해하고있으면 될까요?

답변 1

답변을 작성해보세요.

1

강민철님의 프로필

강민철

2023.01.20

하나씩 답변 드릴게요.

19~23줄에 있는 int형 변환 함수에 리턴타입이 없는이유가 궁금합니다.

클래스 내에서 정의된 operator 함수의 경우에는

operator int에서 어떤 리턴 타입인지 (어떻게 변환될지) 충분히 추론 가능하기 때문에

명시할 필요가 없습니다.

아래 링크에 답변이 상세히 나와 있으니 참고 바랍니다.

https://stackoverflow.com/questions/3814865/what-is-an-operator-int-function

https://en.cppreference.com/w/cpp/language/operators

 

operator int 뒤에 있는 ()의 의미가 궁금합니다. (int& operator [] (const int index) { return m_list[index]; } )와의 차이

일단 ()와 []는 용례가 좀 달라요.

operator int()에서 괄호는 이 함수가 int형으로 변환하는 데

사용되는 오버로딩 함수임을 나타냅니다.

추가로 들어주신 코드의 경우

int& operator [] (const int index) { return m_list[index]; }

에도 ()는 오버로딩함수임을 나타내긴 하지만

[]의 경우에는 배열의 인덱스 오버로딩임을 나타냅니다.

배열의 인덱스 오버로딩을 학습해보시면 좋을 것 같습니다.

https://huiyu.tistory.com/entry/C-%EB%B0%B0%EC%97%B4-%EC%9D%B8%EB%8D%B1%EC%8A%A4-%EC%97%B0%EC%82%B0%EC%9E%90-%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9

 

앞서 1,2번의 궁금증을 해결하기보다는 그냥 오버로딩이 이러한 형식으로 작동하고 47~49줄 처럼 형태는 다르지만 오버로딩을 배우기전 알고있던 기본적인 형변환방식에 모두 적용이된다 라고만 이해하고있으면 될까요?

개인적인 생각입니다만 만일 처음 학습하신다면 그 정도에서 이해해주시고

강의를 완강한 뒤 이해를 높인 뒤에 추후 심화학습으로써 파고들어가보시는 것도

좋지 않을까 싶습니다.

mankaru님의 프로필

mankaru

질문자

2023.01.24

답변감사합니다. 많이 도움이 되고있습니다.