맞는데 왜 틀릴까..?

C++

C++ 실습 문제 12 (연산자 오버로딩)

안도일 2022. 4. 17. 16:46

연산자 오버로딩은 두 가지 형태가 있다.

1. 외부 함수로 구현되고 클래스에 프렌드로 선언되는 경우

Color operator+(Color op1, Color op2); //외부 함수

class Color {

   ...

   friend Color operator+ (Color op1, Color op2);

}

 

2. 클래스의 멤버 함수로 작성되는 경우

class Color {

   ...

   Color operator+ (Color op2);

}

 

 

1. 두 개의 Power 객체를 더하는 + 연산자를 작성하시오

메인 함수
클래스 선언부
클래스 구현부

 

만약 객체끼리의 합이 아니라 객체+정수 라면 Power operator+(int op2)로 연산자 함수를 선언해야 한다.

 

 

 

 

2. 두 Power 객체를 더하는 += 연산자를 작성하시오

메인 함수
클래스 선언부
클래스 구현부

 

 

 

 

3. 전위 ++a 연산자를 작성하시오

메인 함수
클래스 선언부
클래스 구현부

 

 

 

4. 후위 a++ 연산자를 작성하시오

메인 함수
클래스 선언부
클래스 구현부

후위 연산자는 그 선언 형태가 조금 특이한데, 이유는 전위 연산자와 같은 형태로 선언을 하면 그 둘을 구별할 수 없기 때문에, 실제로는 쓰지 않는 정수 값을 매개변수로 넘겨주어 전위 연산자와 후위 연산자를 구별하게 한다.

 

 

 

 

5. 2+a 덧셈을 위한 + 연산자 함수를 프렌드로 작성하시오

메인 함수
클래스 선언부
클래스 구현부

b = a+2는 컴파일러가 b = a. +(2)로 인식하여 기존 형태처럼 함수를 작성하지만,

b = 2+a는 위와 같이 변환하면 b = 2. +(a)가 되는데 이는 컴파일러가 인식을 하지 못한다.

따라서 컴파일러는 b = +(2, a)의 형태로 변환하고 그에 맞추어 연산자 함수를 작성해 주어야 한다.

 

 

 

 

6. 단항 연산자 ++를 프렌드로 작성하시오

메인 함수
클래스 선언부

전위 연산자 ++a와  후위 연산자 a++는 모두 참조 매개변수를 사용하는 것은 같지만 리턴 타입이 다른 것에 주의하자

프렌드 선언에서도 마찬가지로 후위 연산자의 매개변수 int x는 의미 없는 값으로 전위 연산자와 구분하기 위함이다.

 

 

 

 

7. 참조를 리턴하는 << 연산자를 작성하시오

메인 함수
클래스 선언부
클래스 구현부

 

'C++' 카테고리의 다른 글

C++ 실습 문제 14 (Class Inheritance)  (0) 2022.05.02
C++ 실습 문제 13 (연산자 오버로딩)  (0) 2022.04.19
C++ 실습 문제 11 (Friend)  (0) 2022.04.17
C++ 실습 문제 10 (Static)  (0) 2022.04.11
C++ 실습 문제 9 (Default parameter )  (0) 2022.04.11