inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

타입 변환 #2

부모클래스 = 자식클래스 부분이 잘 이해가 안갑니다ㅏㅏ

360

혁스일상데쓰네

작성한 질문수 3

0

(ex. Dog dog = bulldog )

개념적으로 Dog이 큰거고 bulldog이 작기 때문에

큰 Dog안에 bulldog을 대입하는게 가능하고

bulldog에 Dog을 대입하는거는 형변환이 필요하다.

개념적으로는 이해가 가지만.....

 

(ex. BullDog bulldog = dog )

dog는 의 멤버변수는 2개고 bulldog의 멤버변수는 상속받아서 3개 잖아요

그래서 dog는 size가 8byte 이고 bulldog은 size가 12byte라고 했을 때

작은바구니(dog)에 큰 데이터(bulldog)을 넣는게 왜 성립되는지 이해가 안갑니다.  (ex. Dog dog = bulldog )

오히려 큰바구니에 작은 데이터를 넣는게 자연스럽지 않나요? (ex. BullDog bulldog = dog )

C++

답변 1

0

Rookiss

위에서 말한 '크다'는 의미는 메모리가 크다는게 아니라
'개념적으로 더 포괄적'이 핵심입니다.
Dog 즉 개는 BullDog 외에도 푸들이나 진도개 등 정말 다양한 견종을 포함할테니.

불독은 개입니까? -> YES
개는 불독입니까? -> NO

~로 인식할 수가 있습니다.

불독은 개이기 때문에, BullDog -> Dog 로 변환하기 위한 모든 정보를 이미 다 포함해서
일부 데이터(BullDog만 갖고 있는 데이터)를 버리면 Dog로 다시 변신할 수 있습니다.
다만 개는 불독이라는 보장이 없기 때문에, Dog->BullDog으로 변환해버리면
불독이 꼭 갖고 있어야 할 추가 정보가 채워지지 않을 수 있습니다.
따라서 문법적으로 맞지 않는 것이죠.

참고로 문법상은 그렇긴 한데,

(ex. Dog dog = bulldog )

이런 코드는 평생 작성할 일이 생기지 않습니다.
굳이 이렇게 데이터 일부를 버리고 Dog 형태로 다시 저장해야 할 이유도 상황이 전혀 없기 때문이죠.
실제로는 나중에 Dog* dog = bulldog; 형태로
부모 포인터 형태로 변환하는 경우는 빈번하지만,
이 경우 어떤 데이터를 '버리고' 복사하는 개념이 아니라
단지 포인터 타입을 다르게 간주해서
해당 주소를 타고 가면 Dog이 있는 것으로 일단 생각하며 관리합니다.
필요하다면, 나중에 타입을 체크해서 BullDog*으로 다시 변환하면 되겠죠.

0

혁스일상데쓰네

넵 답변주셔서 감사합니다.

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

561

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

456

1

strcpy() 구현 관련 질문

0

546

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

478

1

클래스 타입의 포인터 질문합니다

0

563

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

505

1

템플릿 특수화 관련 질문

0

393

1

포인터 관련 질문합니다!

0

276

1

Unable to start assembler. Check your settings.

0

852

2

cpu선택

0

552

1

포인터 질문이 있습니다

0

336

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

593

1

iterator 삭제관련

0

419

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

316

1

15 분 45초 대 질문

0

319

0

스택 프레임 질문합니다!

2

316

1

오른값 참조 in 게임

0

394

0

동적할당 질문이 있습니다

0

460

1

안녕하세요 메모리에 대해 질문드립니다.

0

314

1

함수객체 의 매개변수

0

370

1

복사생성자

0

442

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

431

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

360

1

스택 오버플로우

2

804

1