본문 바로가기

C++ 기초 1

[C++] 6-5 프렌드 연산자 함수

프렌드 연산자 함수

   연산자를 특정 object에 대해 오버로드하는 경우, 연산자 함수를 프렌드 함수로 정의할 수 있다. 일반적으로 연산자 오버로드는 프렌드 함수보다 멤버 함수로 많이 이용된다. 

   프렌드 연산자 함수를 호출하는 경우, 이는 멤버 함수가 아니므로 this 포인터가 암묵적으로 전달되지 않는다. 따라서 프렌드 연산자 함수로 이항 연산자를 오버로드하는 경우에는 연산에 사용되는 2개의 object가 프렌드 연산자 함수의 매개변수에 전달되어야 한다. 단항 연산자를 오버로드하는 경우, 연산에 이용된 1개의 object가 프렌드 연산자 함수의 매개변수로 전달되어야 한다. 

 
예제
#include <iostream>
using namespace std;
class myscore {
private:
	int kor;
	int eng;
public:
	myscore() {
		kor = 0; eng = 0;
	}
	myscore(int a, int b) {
		kor = a; eng = b;
	}
	void output(int& a, int& b) {
		a = kor; b = eng;
	}
	friend myscore operator+(myscore o1, myscore o2);
};

myscore operator+(myscore o1, myscore o2)
{
	myscore temp;
	temp.kor = o1.kor + o2.kor;
	temp.eng = o1.eng + o2.eng;
	return temp;
}

int main()
{
	myscore ob1(90, 70), ob2(80, 70), ob3;
	int kor, eng;
	ob3 = ob1 + ob2;
	ob3.output(kor, eng);
	cout << "ob3.kor = " << kor << ", ob3.eng = " << eng << endl;
	return 0;
}
실행 결과
ob3.kor = 170, ob3.eng = 140
  • 프렌드 연산자 함수를 이용해서 연산자 +을 myscore형의 객체에 대해 오버로드 하였다.
  • ob1 + ob2에서 왼쪽 오퍼랜드인 객체 ob1이 첫 번째 매개변수, 오른쪽 오퍼랜드인 객체 ob2가 두번째 매개변수로 프렌드 연산자 함수에 명시적으로 전달된다.
참고

1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13

 

'C++ 기초 1' 카테고리의 다른 글

[C++] sizeof 연산자  (1) 2024.01.12
[C++] goto문 설명 및 예제  (1) 2024.01.11
[C++] 6-4 []연산자의 오버로드  (1) 2024.01.09
[C++] 6-3 관계 연산자의 오버로드  (2) 2024.01.08
[C++] 6-2 단항 연산자의 오버로드  (2) 2024.01.05