• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

실수로 잘못 입력한 내용의 결과물은 왜이렇게 나올까요?

21.02.14 00:56 작성 조회수 187

0

Student.h에서 제가 실수로 Student 클래스의 _name을 

안지우고 오버로딩 할 떄도 그대로 썼는데

아래와 같이 아예 _name부분은 출력이 안되고 바로 _intel이 출력이 되더군요.  그런데 그이유가 뭔지 모르곘습니다. 에러는 안납니다. 23:29초부분입니다.

답변 1

답변을 작성해보세요.

0

안소님의 프로필

안소

2021.02.14

안녕하세요

Student 에도 m_name 멤버를 정의해주셨기 때문에 std객체 안에는 Person으로부터 받은 m_name, 그리고 본인만의 m_name 이렇게 동명의 m_name 부분을 다른 종류로 2개나 가지고 있는 셈이 됩니다.

m_name이 std에 2개 들어있는 것을 확인할 수 있죠

setName은 Person 으로부터 상속받은 멤버함수이기 때문에 setName은 위 사진에서 확인할 수 있듯이 Person으로부터 물려받은 m_name 값을 설정하게 됩니다. 마찬가지로 Student 생성자 보시면 아시겠지만 생성자로 이름 세팅하는 것도 Person 생성자를 호출해서 하고 있으니 이 과정도 Person으로부터 물려받은 m_name 값을 세팅하는 것입니다.

그래서 질문자님께서 실수로 안지우셨던 그 Student 본인만의 m_name은 아무 값도 세팅된적이 없는 빈 문자열인 상태가 유지됩니다. Person으로부터 상속 받은 m_name만 "Jack Jack" -> "Jack Jack2" 가 된거에요.

그런 상태에서 출력 연산자 오버로딩에서 m_name 을 출력하시는데 이건 Student 본인의 m_name입니다. 왜냐하면 Person의 m_name은 private이라 저렇게 접근할 수 없어요. 질문자님께서 실수로 안지우신 그 Student 본인의 m_name은 값이 세팅된적이 한번도 없이 빈 문자열이기 때문에 저런 결과가 나온 것입니다.