Lasiyan
Code

C++ Reference and friend

#C++#참조자#friend#접근 제어

참조자 (Reference)

– 변수에 또 하나의 이름 지정
– 변수 앞에 & 연산자를 사용하여 선언

int A = 10;
int &ReferenceA = A;

사용 목적

참조자를 사용한 Call by reference 호출 가능 (ex. swap 함수)

#include <iostream>
using namespace std;

void Swap(int& x, int& y)
{  // 참조자 사용
  int temp;
  temp = x;
  x    = y;
  y    = temp;
}

void main()
{
  int a = 100, b = 1;
  Swap(a, b);  // int &x = a, int &y = b와 동일
  cout << "a : " << a << " b : " << b << endl;
}

프렌드 (friend)

– 클래스들 사이의 관계 형성
– A클래스에서 외부 다른 클래스 B를 friend 지정 하면 B클래스에서 A의 private 맴버 변수에 접근 가능

class A
{
  friend class B;
  ...
}
#include <iostream>
using namespace std;

class B;

class A
{
  friend class B;

 private:
  int numA;

 public:
  A(int numTmp)
  {
    numA = numTmp;
  }
};

class B
{
 public:
  void print(A a)
  {
    cout << "A class number : " << a.numA << endl;
  }
};

void main()
{
  A a(10);
  B b;

  b.print(a);
}

friend를 사용하여 A의 외부 클래스 B에서 A의 private 맴버 변수에 대한 접근이 가능해진다. 만약 여기서 friend를 주석 처리 할 경우 error C2248 오류가 발생한다.

그러나 friend는 OOP의 핵심 중 하나인 정보 은닉에 저해되는 행위로 가급적 사용을 지양하길 권고한다.