실수로 잘못 입력한 내용의 결과물은 왜이렇게 나올까요?
298
작성한 질문수 13
Student.h에서 제가 실수로 Student 클래스의 _name을
안지우고 오버로딩 할 떄도 그대로 썼는데
아래와 같이 아예 _name부분은 출력이 안되고 바로 _intel이 출력이 되더군요. 그런데 그이유가 뭔지 모르곘습니다. 에러는 안납니다. 23:29초부분입니다. 

답변 1
0
안녕하세요
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
462
1
메모리 주소 10진수로 출력
1
651
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
496
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
532
1
메모리 주소에 관한 질분
0
677
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
547
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
442
1
Digit 뒤에 reference를 사용하는 이유
0
507
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
320
1
dat파일이...
0
536
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
641
1
복사 생성자 관련 질문이 있습니다.
0
453
1
수업 중 궁금한점이 있습니다.
1
388
1
라이브러리자체가 이해가 되지 않습니다.
0
559
1
마지막 예제 질문
0
300
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
373
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
408
1
friend함수 관련 질문이 있습니다.
0
310
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
444
1
3분 17초 질문
0
348
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
443
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
440
2
const Something &st에서 const를 빼면 안되나요?
0
297
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
490
1





