-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
실수로 잘못 입력한 내용의 결과물은 왜이렇게 나올까요?
21.02.14 00:56 작성 조회수 187
0
Student.h에서 제가 실수로 Student 클래스의 _name을
안지우고 오버로딩 할 떄도 그대로 썼는데
아래와 같이 아예 _name부분은 출력이 안되고 바로 _intel이 출력이 되더군요. 그런데 그이유가 뭔지 모르곘습니다. 에러는 안납니다. 23:29초부분입니다.
답변을 작성해보세요.
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은 값이 세팅된적이 한번도 없이 빈 문자열이기 때문에 저런 결과가 나온 것입니다.
답변 1