friend 함수
2020. 9. 10. 15:50ㆍ컴퓨터 수업/C++
@프렌드함수
프렌드(friend) 함수는 클래스의 멤버 함수가 아니면서 클래스의 전용(private) 데이터 멤버에 접근할 때 사용하는 함수이다.
이때, 클래스의 멤버 함수가 아니라면, 일반 함수 또는 다른 클래스의 멤버 함수가 될 수 있겠다.
일반 함수 또는 다른 클래의 멤버함수 (외부함수)가 특정 클래스의 전용 데이터 멤버를 참조해야 하는 경우가 생겼을때, 외부 함수를 특정 클래스의 프렌드 함수로 선언하면 해당 클래스의 전용 데이터 멤버들을 참조할 수 있다.
프렌드 함수를 사용하기 위해서는 클래스의 프렌드로 사용할 함수의 원형을 클래스 내부에 선언하고 그 앞에 예약어 friend를 붙인다.
@드는 생각
private 데이터멤버에 접근할 수 있는자는 누가 있을까? 바로 멤버함수밖에 없다.따라서 해당 멤버함수가 아닌 main함수에서 그저 데이터멤버를 호출하는 방법은 friend가 될 수 있겠다.
즉, 데이터멤버에 직접 접근하고 싶다는 생각이 들면 멤버함수 + 프렌드함수를 생각해봐야한다.
@예시 코드
#include <iostream>
using namespace std;
class myclass
{
private:
int x, y;
public:
myclass(int i = 200, int j = 100); // default argument는 선언부에
friend int add(myclass); // @@@@@ argument로 class를 받는것이 당연해보여야한다.
// 이 아규먼트의 접근이 허용되는것.
};
myclass::myclass(int i, int j)
{
this->x = i;
this->y = j;
}
int add(myclass a)
{
return a.x + a.y; // 데이터멤버에 접근하는 모습이다.
}
int main()
{
myclass b;
cout << "add(b) = 200 + 100 = " << add(b) << endl;
}
'컴퓨터 수업 > C++' 카테고리의 다른 글
const에 관한 얘기 (0) | 2020.09.13 |
---|---|
연산자 오버로드(operator overload)//ostream 나중에 채워넣기 (0) | 2020.09.10 |
오버로딩과 다형성 (오버로딩은 그냥 다른 datatype 지원 그 자체다.) (0) | 2020.09.10 |
this 포인터 (0) | 2020.09.10 |
선언과 정의 (0) | 2020.09.10 |