inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C++

11.2 상속의 기본 (2)

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

298

따베수강생

작성한 질문수 13

0

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

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

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

C++

답변 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