friend 함수
클래스의 비공개멤버는 외부함수에서 접근해 갈 수 없다. 비공개 멤버는 클래스의 멤버함수에서만 접근한다. 그런데 멤버함수가 아닌 외부함수에서 접근해야 할 경우가 발생될수 있다. 그런 경우 클래스에서 프렌드
함수로 선언해 주면 외부함수이면서 클래스의 비공개 멤버에 접근할수 있는 권한을 갖게 된다.
클래스의 private: 으로 지정한 데이터 멤버를 외부의 함수나 클래스에서 참조해야 하는 경우 사용한다.
( 서로 다른 클래스들의 비공개 멤버를 접근할수 있다.)
friend로 사용할 외부함수의 원형을 클래스 내에 선언하고 그 앞에 friend라는키워드를 입력
friend 함수 정의 예
class person {
friend void output();
};
예제 5)
// friend 함수의 사용
#include<iostream.h>
#include<string.h>
class person {
private:
char id[20];
int passwd;
public:
person(char *,int);
friend void output(person);
};
person::person(char *id,int passwd)
{
strcpy(person::id,id);
person::passwd=passwd;
}
void output(person per)
{
cout << "ID : " << per.id << endl;
cout << "Password : " << per.passwd << endl;
}
void main()
{
person frd("Ryu Kowan Soon",7890);
output(frd);
}
//두 클래스의 비공개멤버를 비교할 경우 유용하다.
#include<iostream.h>
class pr2;
class pr1{
int pri;
public:
pr1() {pri=0;} //생성자 함수
void set(int status)
{pri=status;}
friend int sta(pr1,pr2); // 프렌드 함수 선언
};
class pr2{
int pri;
public:
pr2() {pri=0;} //생성자 함수
void set(int status)
{pri=status;}
friend int sta(pr1,pr2); //프렌드 함수 선언
};
int sta(pr1 ob1,pr2 ob2)
{
if(ob1.pri==1 ||ob2.pri==1)
return 1;
else return 0;
}
void main(){
pr1 ob1;
pr2 ob2;
cout<<"프린터가 사용중이면 1 아니면 0값 입력\n";
int s;
cout<<"ob1 pc : ";
cin>>s;
ob1.set(s);
cout<<"ob2 pc : ";
cin>>s;
ob2.set(s);
int status;
status=sta(ob1,ob2);
if(status==1)
cout<<"프린터가 사용중입니다. \n";
else cout<<"프린터가 쉬는 상태입니다. \n";
}
==>위의 프로그램의 경우 두 클래스의 비공개멤버를 비교할 때 일반적인 외부함수에서 두 변수를 비교할수 없다. 이런 경우 프렌드 함수를 작성해서 두 비공개 멤버에 접근해 갈수 있다.
카페 게시글
☆ 기초 C/C++
friend 함수
천동이
추천 0
조회 101
05.08.06 18:34
댓글 0
다음검색