c++2011. 11. 5. 18:06

9.3 프렌드 함수(friend function)


 

프렌드 함수의 매개변수는 반드시 클래스의 객체변수 이다 
예를 들면 friend int bbb(student aa);
이렇게 student 클래스 aa라고 객체변수로 만들어서 매개변수에 쓴다


 

클래스의 private 멤버 변수의 초기화는 멤버함수를 통하여 하였다. 그러나 일반 함수로서 비공개 멤버 변수에 접근할 수 있는 것이 프렌드 함수이다.

 

프렌드 함수는 클래스에 종속되지 않은 외부 함수로서 기술하여 멤버 변수에 접근할 수 있기에 멤버 함수와 동일한 기능을 수행할 수 있다.

 

프렌트 함수는 일반 함수로 정의하지만 프렌드 함수를 사용하는 클래스에는 프렌트 함수의 프로토타입을 정의해야 한다. 그리고 함수 앞에 friend라고 키워드를 붙여야 한다.

 

멤버함수는 프로토타입 선언 후 클래스 밖에서 클래스명::멤버함수명()으로 사용하였다.

1) 프렌드 함수는 일반함수이다.

2) 클래스내에 프렌드 함수의 원형을 선언하고 외부에 정의한다.

3) 프렌드 함수의 매개변수는 반드시 클래스의 객체변수이다.

4) 프렌드 함수를 멤버 함수처럼 사용하여 클래스의 멤버 변수에 접근할 수 있다.

 

<형식> 프렌트 함수 사용

class 클래스명{

[private :]

데이터형 멤버변수명1;

데이터형 멤버변수명2;

public :

리턴데이터형 멤버함수명1(매개변수)

{

문장;

}

friend 리턴데이터형 함수명1(클래스명 객체변수);

// friend 프로토타입 선언

};

리턴데이터형 함수명1(클래스명 객체변수)

{

문장;

}

 

<예제1> 프렌드 함수 사용

#include<iostream>

using namespace std;

class student{

int a, b;

public :

void aaa(int x, int y)

{

a = x;

b = y;

}

friend int bbb(student aa);

};

int bbb(student aa)

{

int k;

k = aa.a*5 + aa.b*5;

return k;

}

void main(){

student st; //객체 생성

int result;

st.aaa(100, 200);

result = bbb(st);

cout <<"프렌트 함수 결과 : "<<result<<endl;

}

/* 여러 클래스의 프렌드 함수

특정 함수가 여러 클래스의 프렌드 함수로 사용된다 */

#include <iostream>

using namespace std;

class mbc;

class kbs

{

int salary, hours;

public :

void s_value(int a, int b)

{

salary = a;

hours = b;

}

friend int work_time(mbc mm, kbs kk);

};



class mbc{

int bonus, hours;

public :

void s_value(int m, int n)

{

bonus = m;

hours = n;

}

friend int work_time(mbc mm, kbs kk);

};

int work_time(mbc mm, kbs kk)

{

int result;

result = mm.hours - kk.hours;

return result;

}


void main()

{

mbc mc;

kbs ks;

int result;

mc.s_value(3000,30);

ks.s_value(500,20);

result = work_time(mc,ks);

if(result > 0)

cout <<"MBC가 일을 더 많이 합니다"<<endl;

else 

cout <<"KBS가 일을 더 많이 합니다"<<endl;

}

 

Posted by babuzzzy