모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 게시물ID : programmer_22045
    작성자 : 핫게익
    추천 : 0
    조회수 : 689
    IP : 124.111.***.36
    댓글 : 6개
    등록시간 : 2018/01/26 02:15:14
    http://todayhumor.com/?programmer_22045 모바일
    Cpp의 멤버함수 및 가상함수의 구현방식이 궁금합니다.
    옵션
    • 본인삭제금지
    우선 제가 멤버함수와 가상함수에 대해서 이해한 부분은 다음과 같습니다.
     
     
    1. 일단 기본적으로 일반 멤버함수에 대해서
     
    함수 Func1을 일반 멤버함수로 갖는 클래스 Base와,
    Base를 상속하며, Func1을 오버라이딩한 클래스 Derived이 있다고 할 때,
     
    Base::Func1 과 Derived::Func1 이 코드세그먼트에 먼저 올라간뒤,
     
    Base와 Derived 객체들이 Func1에 접근할 때, 함수포인터 형태로 해당 함수에 접근한다고 알고 있습니다.
     
    이때, Base의 포인터에 Derived 객체를 넣은 뒤 Func1을 호출하면 Derived::Func1이 아닌 Base::Func1이 호출된다고도 알고있습니다.
     
    이를 봤을 때, 제 생각에는,
    컴파일러는 각 객체 내부에 맴버변수로 Base::Func1 또는 Derived::Func1 의 함수포인터를 넣어둔 뒤 호출하는 방식으로 멤버함수 호출을 구현하는 것이 아니라, 컴파일 타임에서 포인터의 형태에 맞는 Func1 주소를 인스트럭션으로 삽입하는 형태로 구현하는 것이라고 생각했습니다.
     
    그래야만, 실제 동작이 그러하듯, 객체의 실제 클래스가 아니라 포인터의 자료형에 따른 함수 호출이 가능할테니까요.
     
     
    2. 가상함수에 대해서
     
    가상함수 테이블을 컴파일러가 생성하고, 이를 데이터세그먼트에 올린 다음, 각 가상함수 테이블을 객체의 멤버변수 형태로 보관하고 있다가
    객체가 가상함수에 접근할 때, 가상함수 테이블로 점프한 뒤 테이블을 참조하여 적절한 함수를 호출한다고 알고있습니다.
     
     
    각 각의 방식에 대해서 떼어놓고 본다면 아무런 의문도 생기지 않습니다. 그런데 이 둘을 합치려니까 의문점이 생깁니다.
     
    첫 째로, 일반 멤버함수의 형태와 가상함수의 형태로 나눌 필요가 있느냐 하는것입니다. 만일 제 생각대로 컴파일러가 1과 2의 구현을 다른 식으로 한다면, 컴파일 시간만 더 잡아먹는 것 아닌가요? 차라리 일반 멤버함수, 가상함수 구분없이 각 클래스에 대한 함수 테이블을 만든 뒤에 각 객체가 테이블 주소를 메타데이터로 갖고있으면,
     
    "객체->함수테이블->함수" 형태로 구현을 일원화 할 수 있는것 아닌가요?
     
    구현이 이원화 되어있으면 컴파일러는 클래스에 가상함수가 있는지 없는지를 먼저 판단하고 호출방식도 달리해야하는데 이는 상당히 비효율적이지 않나요?
     
    둘 째로, 만약 제 생각이 틀리고, 1과 2의 구현이 같은 방식이라면, 어째서 Base 포인터에 Derived 객체를 넣은 뒤 Func1을 호출할 때 컴파일러는 실제 객체의 타입이 아니라, 포인터의 타입을 기준으로 함수호출을 판단하는 것인가요?

    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    22067
    c++ api서버에서 응답 받는 받으려면 무엇을 이용하면 되나요? [1] 베스트금지베오베금지본인삭제금지 작성자새남친 18/02/01 17:34 599 0
    22066
    ++[[]][+[]]+[+[]] [1] 이과출신 18/02/01 16:53 640 0
    22065
    emmet 혹은 코드 자동완성 기능 잘 쓰시는 분에게 여쭤봅니다. [3] 밝은내일아 18/02/01 12:37 398 0
    22064
    이럴때는 어떻게 하면 좋을가요.. [3] 창작글 오토캠핑 18/02/01 10:26 483 0
    22063
    한탄)인턴인데, 자괴감 오지네요.여러분은 신입/인턴 때 어떻게 했나요? [9] 이상혁_ 18/02/01 06:09 1445 4
    22062
    virtualenv 설치하려다가 망했어요.. 제발 도와주세요 ㅠㅠㅠㅠ [3] 본인삭제금지 아재개그제조기 18/01/31 16:38 526 0
    22061
    갑자기 web development 쪽에 참여하게됬는데 뭘공부해할까요.. [9] 아재개그제조기 18/01/31 15:30 691 0
    22060
    호주로 연구석사 다녀오신분 계신가요? 본인삭제금지 데절트폭스 18/01/30 20:28 412 0
    22059
    안드로이드 fragment와 activity 데이터 전달 질문드립니다. [3] 본인삭제금지 형광젖소 18/01/30 17:29 3037 0
    22058
    자연과학 전공이면 어떤 언어를 선택하는 게 좋을까요? [4] Sexphonist 18/01/30 16:42 591 0
    22057
    프로그래밍 언어를 선택할때 도움되는 공식 중 하나 [1] enoeht 18/01/30 10:57 1026 0
    22055
    신입 포폴 유통기한.. [2] 본인삭제금지 LookAt 18/01/30 00:42 848 0
    22054
    개발자 최종테크는 치킨집일까요? [4] 아오리소라 18/01/29 22:34 1112 0
    22053
    (C++, MFC) 이런 간단한 기능을 만드려는데, 어떻게 해야 할까요? [2] 본인삭제금지 훗날닭집사장 18/01/29 14:29 577 0
    22052
    안녕하세요 파이선으로 텍스트파일에 입력 시 딜레이 관련 질문입니다. [3] 못생긴남성 18/01/29 12:02 453 0
    22050
    유니티 초보가 유니티 책 추천 부탁드립니다 (__) [4] 본인삭제금지 의적당근 18/01/27 23:14 8348 0
    22048
    [구인] 스타트업에서 자바스크립트개발자 구하고있습니다. 낡17 18/01/26 15:22 732 0
    22047
    취업기간 다들 어느정도로 잡으시나요? 본인삭제금지 Jin02 18/01/26 13:21 555 0
    22046
    신입사원 연봉계약할때 얼마가 적절한건가요 [13] 꾸르렁꾸르렁대 18/01/26 10:19 1699 0
    Cpp의 멤버함수 및 가상함수의 구현방식이 궁금합니다. [6] 본인삭제금지 핫게익 18/01/26 02:15 690 0
    22043
    웹 개발 관련 문의드립니당.. [4] Xilenteyes 18/01/25 13:52 617 0
    22042
    프리랜서 알바인데..위약금을 물라고합니다. [4] 창작글 쇼킹유머 18/01/24 20:02 1530 0
    22041
    깔깔 이번 연봉협강은 망했군요 [14] JSP월급루팡 18/01/24 16:24 1312 0
    22040
    LNK1120 확인할 수 없는 외부참조 오류 관련 질문드립니다..! [3] 본인삭제금지 훗날닭집사장 18/01/24 13:51 578 0
    22039
    sql 문법 잘 아시는 분... [3] 밝은내일아 18/01/24 13:24 601 0
    22038
    네임서버 질문이요! [4] 본인삭제금지 블로블로그 18/01/23 19:02 526 0
    22037
    오일러 프로젝트 616번 문제. 문제가 이해가 안가요 [3] RunDavid 18/01/23 15:58 576 0
    22036
    이런 현상.. 혹시 방법이 없을까요? --; [2] 본인삭제금지 훗날닭집사장 18/01/23 11:49 1793 0
    22035
    C언어를 다시 한 번 봐야할 것 같은데영 AsadaShino 18/01/23 03:22 700 0
    22034
    주소창에 아이피를 치고 들어가지 않아져요.. [3] 본인삭제금지 블로블로그 18/01/23 00:52 1035 0
    [◀이전10개] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈