강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

홍정모의 따라하며 배우는 C++

9.1 산술 연산자 오버로딩 하기

연산자오버로딩 기초개념 강의가 따로 있나요?

작성

·

369

0

안녕하세요? 차근차근 강의를 듣고있는데 operator + 라는 연산자오버로딩 개념이 설명없이 갑자기 튀어나와서 질문 올립니다.
혹시 operator + 개념이 따로 설명되어있는 강의가 있나요? 누락된 것인가 싶어서요

퀴즈

66%나 틀려요. 한번 도전해보세요!

사용자 정의 타입에 대해 연산자 오버로딩을 하는 주된 목적은 무엇일까요?

코드 실행 속도를 빠르게 하기 위해

사용자 정의 타입을 내장 타입처럼 자연스럽게 사용하기 위해

객체의 메모리 관리를 자동화하기 위해

클래스의 상속 관계를 정의하기 위해

답변 2

5

아니요! 9.1 강의가 연산자 오버로딩의 첫 번째 강의입니다. 9.1 강의만으로도 충분히 연산자오버로딩이 어떤건지 익히실 수 있습니다. (그래도 낯설고 이해되지 않는 부분이 있으시다면 언제든지 질문 주세요 😀)

1 + 3 혹은 1.0 + 4.0 이렇게 기본 자료형 타입 (int, double 등등) 은 +, -, *, 등등 이런 연산자를 사용하여 연산하는게 가능하죠. 기본적으로 지원이 되기 때문입니다.

그러나 예를들어 Cent 라는 클래스를 우리가 직접 만들고 이를 통해 찍어낸 객체끼리 + 연산을 시키고 싶다면 어떨까요? cent1, cent2 가 Cent 타입의 객체라고 가정해보면 cent1 + cent2 연산을 시켰을 때 어떤 특정 기능을 수행하게끔 하고 싶다면 바로 + 연산자 자체를 오버로딩 하면 됩니다. 이게 바로 연산자 오버로딩 개념입니다. 연산자도 함수라고 생각하고 다가가시면 편해요. 연산자도 함수라고 생각하면 이해 할 수 있으실거라 생각됩니다. 함수 바디 부분 적어주듯, Cent 타입의 객체가 파라미터로(즉, 피연산자로) + 에 들어왔을 때! 어떤 기능을 할 것인지 바디 부분에 정의해주면 됩니다. 

연산자 오버로딩은 2 가지 형태가 있습니다. 함수도 전역함수, 멤버함수가 있듯이 연산자 오버로딩도 전역함수로서 오버로딩 하는 경우가 있구요, 특정 클래스의 멤버함수로서 오버로딩 하는 경우가 있습니다.

1️⃣ 전역함수로 연산자 오버로딩 

ex)  Cent operator + (Cent& cent1, Cent& cent2) 를 정의합니다.

(그냥 함수라고 똑같이 생각해보세요! 함수 이름이 operator + 일 뿐인거구요, 리턴타입은 Cent, 매개변수는 cent1, cent2 인 함수인거나 마찬가지입니다. 이 수업에서 초반에 소개하신 add 함수랑 별반 다를게 없는 거에요. 이름만 operator + 일뿐!)

이렇게 Cent 객체 2 개를 파라미터로 받는 연산자 오버로딩을 해두면 Cent 타입의 두 객체를 피연산자로 하여 + 연산을 시키면 (c1 + c2) 이제 오버로딩 해놨던  operator + (Cent& cent1, Cent& cent2) 가 호출됩니다. 첫번째 파라미터(첫번째 피연산자)는 cent1 에 들어가구요, 두번째 파라미터(두번째 피연산자)는 cent2 에 들어가게 됩니다. 그러고나면 오버로딩시 정의한 내용대로 실행이 될 것입니다.

2️⃣ 멤버함수로 연산자 오버로딩

ex) Cent operator + (Cent& cent2) 를 정의합니다.

멤버함수라는건 객체에서 호출할 수 있는 함수라는거죠! 멤버함수로 연산자 오버로딩을 했을땐 다음과 같이 동작합니다. c1 + c2 하게되면 c1 객체에서 본인의 멤버함수 Cent operator + (Cent& cent2) 를 호출하구요, 멤버함수를 호출한 당사자인 c1 이 첫번째 피연산자가 됩니다. 그리고 c2 가 파라미터로 넘어가서 두번째 피연산자로서 동작을 하게 됩니다.

0

설명 감사합니다 이해 잘 되었어요!

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기