• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

바보같은 질문 드립니다.

23.12.31 01:39 작성 23.12.31 01:41 수정 조회수 150

1

안녕하세요.

3:00 영상 초반에 클래스 외부에 add함수를 작성한 예제를 보여주셨는데, 해당함수는 레퍼런스로 c1 , c2 , c_out 을 인자로 받고 있습니다.

레퍼런스로 받을경우 그 인스턴스의 메모리상 주소값을 그대로 받아오기 때문에 c.m_cents 처럼 private 에 속하는 멤버변수도 직접 접근이 가능해야 되는거 아닌가요...?

레퍼런스로 인자를 받았다면 객체 그 자체로 private 영역에 접근이 가능해야될것 같은데,

getter , setter 함수를 사용해서 private 변수에 접근해야되는 이유를 모르겠습니다ㅠ

 

void add(const Cents &c1 , const Cents &c2 , Cents &c_out) 
{ 
c_out.getCents() = c1.getCents() + c2.getCents(); 
}

답변 1

답변을 작성해보세요.

1

Soobak님의 프로필

Soobak

2023.12.31

안녕하세요, 답변 도우미 Soobak 입니다.

 

에제의 void add(const Cents &c1, const Cents &c2, Cents &c_out) 함수는 Cents 클래스 외부에 정의되어있습니다. 이 경우, 해당 함수는 클래스의 멤버 함수가 아니므로 private 멤버 변수에 직접 접근할 수 없습니다.

레퍼런스를 통해 객체의 메모리 주소를 받아오더라도, private 멤버에 대한 접근 규칙은 변경되지 않습니다.
이는 객체 지향 프로그래밍에서 캡슐화, 정보 은닉과 관련된 원칙을 지키기 위함입니다.
따라서, private 멤버 변수에 접근하기 위해서는 클래스 내부에서 정의된 public 또는 protected 멤버 함수를 사용해야 합니다.

수박선생님 감사합니다. private 과 member function 에 대한 이해가 확실하지 않았던것 같아요.

클래스 내,외부로 여러번 구현해보니 이해가 되었습니다.