9.3 프렌드 함수(friend function)
프렌드 함수의 매개변수는 반드시 클래스의 객체변수 이다
예를 들면
이렇게 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;
}
'c++' 카테고리의 다른 글
객체 배열 및 포인터 의 이해 (0) | 2011.11.05 |
---|---|
첫번째와 두번째에서 name 배열에서 차이가 생기는 거 조심!! (0) | 2011.11.05 |
switch 문 쓰는법 (0) | 2011.11.05 |