부모 class human
자식 class boy
가상메소드를 배우는중인데 이해가 안가는데
human *p = new boy 가 왜 가능한거져 형타입자체가 틀리고
논리적으로 가능하겠지만 그게 뭔지 이해가안되여
그리고 virtual 이게 쓰여지면 자식크래스에 있는 오버라이딩된 함수를 가르킨다는데
설명좀 해주세여 5시간쨰 이해가 안갑니ㅏㄷ ㅜㅜ 교수님한테 전화하려고 해도
휴대폰 비 안내서 전화도 못하고 있어여 ㅜㅜ
자식 class boy
가상메소드를 배우는중인데 이해가 안가는데
human *p = new boy 가 왜 가능한거져 형타입자체가 틀리고
논리적으로 가능하겠지만 그게 뭔지 이해가안되여
그리고 virtual 이게 쓰여지면 자식크래스에 있는 오버라이딩된 함수를 가르킨다는데
설명좀 해주세여 5시간쨰 이해가 안갑니ㅏㄷ ㅜㅜ 교수님한테 전화하려고 해도
휴대폰 비 안내서 전화도 못하고 있어여 ㅜㅜ
C++ 기본 문법도 안되있는거같은데 이딴 질문하기전에 그냥 책을 좀더 보고 오도록
가상함수가 머리에 들어있지도 않은거같은데 그 상위단계를 하려고하니 안되지, 한국인들 무식하다고 알리는 대표적인 케이스지
왜 가능한거져? => 언어 설계가 그렇게 되있으니까
그리고 쓴소리 좀 더하자면, 휴일인데도 공부하는건 너만 하는게아니고 기본적인 프로그래밍 조금이라도 할줄아는 애들은 원래부터 주말이란 없음요, 아 물론 잘하는님들은 제외 ㅎㅎ
그리고 급하다면 돈을 구걸해서 공중전화 박스에서라도 전화해가지고 교수한테 물어보면 될거아녀, 마인드 자체부터가 맘에안든다, 그렇게 편하게 공부하다가는 그냥 이도저도아닌 회사 취직해서 30대 중반에 짤리고 막노동 뛰는거지뭐
아니 책순서대로 보고있는데 가상함수가 나왔는데 너무 간단하게 나와서 이것저것 찾아봤는데 모르겠어여
글쓰고보니 공중전화 드립은 좀 무리수네 ㅈㅅ
공중전화기 우리동네에 없습니다 저 포인터 부분만이라도 갈켜주세여
논리적으로 가능하겠지만.. /이거면 이해한거 아니야?
1. 부모 타입 포인터에 자식타입 객체주소가 되는건 왜냐고 물어봐도... 그냥 언어 정의가 그리 되있는데 어쩔? 의외로 써먹긴 좋을거야. 2. virtual예약어도 마찬가지. 만약 human* p[3]; p[0] = new boy; p[1] = new human; p[2] = new idiot;이라고 되어 있으면, human에서 virtual 선언되고 자식클래스인 boy, idiot에서 오버라이딩된 함수 foo()를 콜할 시, p[0]->foo()는 boy에서 오버라이딩된 foo()함수가 콜되고, p[1]->foo()는 human에서 선언된 함수, p[2]->foo()는 idiot에서 오버라이딩된 함수를 콜함.
참고로 내가 써놓은건 다 어지간한 C++ 입문 책에서 떠먹여주듯이 써놓는 내용들임. 책좀 봐라 그러니까.
그리고 교수도 아마 그런 멍청한 질문에 황금같은 주말시간을 낭비하면 네놈의 머리통을 전공책으로 찍어버릴걸.
감사합니다 근데 저부분은 저도 알아요 ㅜㅜ
그런데 니가 써놓은게 그거잖아. 알면서 물어본거냐?
저는 human *p = new boy 이렇게 선언 됬을시 human 에 있는 메소드를 virtual로 정하고 오버라이딩된 자식클래스를 가르키지 잖아요 근데 책에서는 p포인터가 boy를 가르키고 있는데 왜 human 객체 먼저들어가나요 위에 글의사전달이 잘못된거면 ㅈㅅ
일단 C++컴파일러는 이 p가 부모타입 객체로 선언됬으니 부모 함수를 보고, 버추얼 함수면 이게 상속된 자식클래스인지 아닌지, 자식클래스에 이 함수가 오버라이딩 되있는지 안되있는지를 테이블에서 찾아봄. 그리고 그런게 있으면 자식클래스의 오버라이딩된 함수를 콜함. 이내용이라면 교수한테 물어볼만 한데 TC++PL에 이내용이 있던가 오래되서 잘....-_-
잘못말해는데 동적으로도 이게 되니 이 작업이 수행되는건 컴파일러타임이 아니라 런타임이겠군.
오오 ㅄ님 감사
책에 다 있는거 아님? 가상테이블 다이나믹바인딩..이런거?-_-
가상테이블 동적바인딩은 근데 완전 입문서엔 누락된 경우도 자주 봤음. 여튼 이런게 런타임에 수행되게 하기 위해 클래스의 인스턴스는 멤버 변수들과 더불어 가상 함수 테이블이라는 놈을 갖고 있음..
나 근데 오래되서 진짜 잊어먹은듯. C++에서 실제 이걸 구현하는건 내가 써놓은 내용하고 달랐던거같은데... 일단 가상함수테이블로 찾아봐라.