복사 생성자 관련 질문드립니다

조회수 365회
class SoSimple{
private:
        int num1; int num2 

..........
    }


SoSimple(SoSimple &copy)  
          :num1(copy.num1) ,   :num2(copy.num2)    {.....}

위에 15,16행은 copy라는 객체로 참조를 받아 맴버 변수 num1과 num2에 접근하고 있습니다.

허나 copy 객체를 통하여 private에 있는 맴버변수 num1과 num2을 외부에서 어떻게 불러올 수 있는지 궁금합니다.

제가 잘못알고 있는 것 같은데 아시는 분 계시면 도움 부탁드립니다!!

1 답변

  • 일반적으로 객체에서 private 멤버 변수는 바로 접근할 수 없습니다.

    그러나 복사 생성자에서는 인수로 넘겨준 객체에서 자신의 private 멤버에 접근 가능합니다.

    복사 생성자라는 것이 새 객체를 만들때 이미 존재하는 객체를 이용해서 새 것을 만드는 것인데, 이때 조건이 반드시 같은 클래스여야 합니다.

    SoSimple(const SoSimple &copy);
    

    질문에는 const가 없었지만 보통은 위와 같이 const를 넣습니다.

    복사 생성자를 이용해서 일반적으로는 동일한 값을 새 객체에 저장합니다만, 값을 변경해서 저장할 수 도 있습니다.

    만약에 이러한 규칙이 없다면 복사 생성자의 인수에서 private 멤버의 값을 알아오기 위해서, 애초에 클래스의 형태를 복사 생성자를 염두하고 만들어야 하는 문제가 있을것 같네요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)