김지희 학생, 반갑습니다.
2항 연산자의 다중정의에 대한 질문이군요.
교재와 강의를 통해 설명한 것처럼 2항 연산자는 좌측 피연산자의 클래스의 멤버로 다중정의하거나
특정 클래스에 속하지 않는 연산자로 다중정의하는 방법이 있습니다.
문제에서 답항 ③의 + 연산자는 좌측 피연산자가 A 클래스의 객체이므로 A 클래스에 선언되어 있는 + 연산자를 사용합니다.
이 연산자는 우측 피연산자가 A 클래스의 객체이어야 하는데, int형 값으로 A 클래스의 객체를 생성하는 생성자가 선언되어 있으므로
int형 변수인 c의 값이 묵시적 형변환을 통해 A 클래스의 객체로 변환되어 동작하게 됩니다.
반면 답항 ④에서는 좌측 피연산자가 int형 변수인 c인데, 이 경우 C++의 기본 자료형인 int 자체를 우리가 수정할 수 없으므로
특정 클래스에 속하지 않는 연산자로 + 연산자를 다중정의를 해야 c + a 라는 연산을 할 수 있습니다.
이 경우 첫째 형식 매개변수는 int형, 둘째 형식 매개변수는 A 클래스의 상수 참조 형식이면 되겠습니다.
그런데 이 문제에는 이러한 연산자가 다중정의 되어 있지 않으므로 컴파일 과정에서 에러가 발생하게 됩니다.
이해에 도움이 되었기를 바랍니다.
이병래 교수