title: “C++ 10. 프렌드 연산자” categories:

  • CspecialCharspecialChar

    #C++ 10. 프렌드 연산자 : 네이버 블로그

c++에서 객체를 사용하다 보면 객체 내의 private 맴버에 접근 할 때가 있다

만약 객체 안의 데이터가 필요한데 외부 함수에서 필요하면 어떻게 해야 할까

우리는 friend 연산자를 통해 외부 함수가 객체 내의 데이터에 접근 할 수 있도록 할 수 있다

아래 코드를 보자

#include
using namespace std;
class Circle;
bool IsEqual(Circle r1, Circle r2);
class Circle {
 int radius;
public:
 Circle(int r) {
 this->radius = r;
 }
 friend bool IsEqual(Circle r1, Circle r2);

};
bool IsEqual(Circle r1, Circle r2) {
 if (r1.radius == r2.radius)
 return 1;
 else return 0;
}

main은 적어두지 않았다

한줄씩 가보자

#include //헤더파일

using namespace std; //std 네임스페이스 사용

class Circle; //Circle을 전방 선언, 뒤에 IsEqual의 매개변수로 받기 위해

bool IsEqual(Circle r1, Circle r2); //IsEqual 전방 선언. 뒤에 IsEqual에서 Circle 내의 매개변수에 접근하기 위

해(아직 private 맴버가 만들어지지 않음

class Circle {

int radius;

public:

Circle(int r) {

this->radius = r;

}

friend bool IsEqual(Circle r1, Circle r2);

};

//Circle 객체 구현, private 맴버로 radius를 가지고 있음

bool IsEqual(Circle r1, Circle r2) {

if (r1.radius == r2.radius)

return 1;

else return 0;

}//friend로 내부 데이터에 접근 가능(radius)

처음 볼 때는 무엇이 다른지 알기 힘들 수 있다

필자는 처음에는 friend가 단순히 외부 함수를 불러와 객체 내에서 쓸 수 있게끔 하는 것인 줄 알았다ㅋㅋㅋ

기억하자! 프렌드는 외부 함수가 객체 내부의 데이터에 접근하기 위해 사용된다

즉 객체 안에서 friend로 외부 함수를 불러오게 되면 외부 함수는 객체의 private데이터에 접근할수있다

(같은말 반복 ㅋㅋㅋ)

프렌드 함수로 클래스 내의 함수가 다른 클래스의 private 에 접근 할수도 있다

물론 클래스 전체를 프렌드 선언을 해서 다른 객체의 데이터를 모든 함수가 쓸 수 있다

(ㅋㅋㅋ 어렵당)

#include
using namespace std;
class Circle;
class CircleFuntion;

class Circle {
 int Radius;
public:
 Circle(int r) {
 Radius = r;
 }
 friend CircleFuntion;
};
class CircleFuntion {
public:
 CircleFuntion() {
 }
 void ShowRadius(Circle a) {
 cout << a.Radius<<endl;
 }
};
int main() {
 Circle A(10);
 CircleFuntion B;
 B.ShowRadius(A);
}

CircleFuntion 클래스는 Circle에서 프렌드되어 Circle내부의 데이터에 접근이 가능하다

그래서 CircleFuntion 내에 있는 함수 ShowRadius는 입력된 Circle a의 내부 데이터 Radius를 출력한다

업데이트: