본문 바로가기

C++ 기초 2

C++ friend 함수

friend 함수

   friend 함수는 클래스 멤버 함수가 아니면서 클래스의 private 멤버 변수를 사용할 수 있는 함수이다. friend 함수가 필요한 이유는 연산자 오버로드와 특별한 입출력 함수를 만드는데 유용하기 때문이다.

   friend 함수는 클래스의 멤버 함수가 아닌 일반 함수로 정의된다. friend 함수는 참조하는 클래스 안에 함수 선언해야 하는데, 함수 이름 앞에 friend를 붙여서 선언해야 한다. 참고로 friend 함수는 상속되지 않으므로 파생 클래스에 friend 함수를 사용할 수 없다. 

 

 
예제
#include <iostream>
using namespace std;

class POINT {
private:
	int x, y; // private로 선언된 멤버 변수
public:
	POINT();	// 생성자 함수 정의 

	void SetPoint(int a, int b) {
		x = a;
		y = b;
	}
	// friend 멤버 함수는 class 정의부에 형식이 정의해야함. 
	friend int IsSame(POINT object);
};
POINT::POINT()	// 외부에 생성자 함수 정의
{
	x = 0;
	y = 0;
	cout << "생성자 호출- x, y값이 0으로 초기화" << endl;
}
// friend 함수 IsSame은 일반 함수로 정의됨
int IsSame(POINT ob) {
	if (ob.x == ob.y) return 1;
	else return 0;
}

int main()
{
	POINT ob;	// ob객체가 생성되면서 생성자가 호출됨 - x = 0, y = 0
	ob.SetPoint(5, 10);	//x, y에 5, 10이 저장됨
	if (IsSame(ob)) cout << "x, y는 같은 값" << endl;
	else cout << "x, y는 다른 값" << endl;
}
실행 결과
생성자 호출- x, y값이 0으로 초기화
x, y는 다른 값
참고

1. 홍원기, Visual C++를 활용한 Windows Programming, 북스홀릭퍼블리싱, 2019.02.2

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

C++ 클래스 상속 II  (1) 2024.02.01
C++ 클래스 상속 I  (0) 2024.01.31
C++ this 포인터  (0) 2024.01.29
C++ 동적 메모리 할당 및 제거 (new, delete)  (0) 2024.01.25
C++ 객체 포인터와 객체 배열  (0) 2024.01.23