모바일 오유 바로가기
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도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    핫게익님의
    개인페이지입니다
    가입 : 12-06-22
    방문 : 1157회
    닉네임변경 이력
    회원차단
    회원차단해제
    게시물ID : programmer_22045
    작성자 : 핫게익
    추천 : 0
    조회수 : 678
    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 초과시 해당없음)

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

    번호 제 목 이름 날짜 조회 추천
    Cpp의 멤버함수 및 가상함수의 구현방식이 궁금합니다. [6] 본인삭제금지 핫게익 18/01/26 02:15 108 0
    234
    UDP 에코 서버-클라이언트 실습중인데 클라이언트 주소가 자꾸 날라갑니다 [6] 본인삭제금지 핫게익 17/11/20 02:55 99 0
    233
    [우분투]그룹을 이용해서 특정 폴더를 수정하고싶습니다. [3] 본인삭제금지 핫게익 17/07/26 16:11 39 0
    232
    파이썬 어제부터 공부하기 시작했는데 큰일이네요. [2] 핫게익 17/04/09 21:01 51 1
    231
    방금 정말 즐거운 게임을 했습니다. [2] 핫게익 16/08/12 02:01 166 4
    230
    방금 달곰작가 작품인줄알고 글 잘못올렸던 사람입니다. 죄송합니다. 본인삭제금지 핫게익 16/08/11 14:05 127 1
    229
    굳이 여성유저가 팀보이스를 하지말아야 할 이유는 없는듯. [3] 핫게익 16/08/06 16:18 143 5
    228
    저는 양성평등을 지지합니다. [1] 핫게익 16/07/28 01:49 66 4
    227
    잘못된 프레임안에선 무슨 얘기를 해도 안 통합니다. [3] 핫게익 16/07/28 00:50 57 0
    226
    아이고 내가 고걸 몰랐네. [2] 핫게익 16/07/27 22:45 51 1
    225
    사과문을 올립니다. [4] 핫게익 16/07/26 16:35 300 15
    224
    이번 정의당사건으로 확실해진 사실. 핫게익 16/07/24 13:43 65 0
    223
    결국 피해는 애꿎은 웹툰작가들과 진짜 페미니스트들의 몫인듯. [2] 핫게익 16/07/21 11:45 146 2
    222
    우리의 패배는 진정한 패배가 아닙니다. 아직 우리는 지지않았습니다. 핫게익 16/07/20 23:32 74 0
    221
    귀족노조란 무엇인가요? [6] 핫게익 16/07/19 12:45 196 9
    220
    나도 맘편히 딜러하고싶다... [2] 핫게익 16/06/20 14:28 109 1
    219
    [14렙]초보잔데 같이하실분~ 핫게익 16/06/16 17:08 24 0
    218
    빠른대전 원래 이런건가요 ㅠㅠ [2] 핫게익 16/06/13 20:32 127 0
    217
    제 눈이 삐었나봐요. 핫게익 16/06/12 20:49 59 0
    216
    피망 모두의마블 닉네임좀 추천해주세요. [9] 핫게익 16/06/08 22:49 37 0
    215
    네이버 댓글중에 기억에 남는 댓글 [1] 핫게익 16/05/17 16:05 78 1
    214
    웹젠과 더민주당이라니 기대된다... [2] 핫게익 16/01/03 21:08 337 10
    213
    흠... 이게 뭐지;;;; [3] 베스트금지 핫게익 15/12/29 23:09 164 10
    212
    여러분의 시간은 소중합니다. [5] 핫게익 15/12/25 15:04 78 16
    211
    [경복궁]그냥 우리나라 자전거도로 상태... [8] 창작글 핫게익 15/12/20 21:39 73 12
    210
    서울지역에서 사람들과 같이타려면 어딜가야하나요??? [9] 본인삭제금지 핫게익 15/12/16 13:25 27 0
    209
    오히려 스팀을 보면 복돌이가 영향력이 크단걸 알 수 있지않나요? [16] 핫게익 15/12/16 12:53 296 1
    208
    제 머리속에는 레지스터가 몇 개 없나봐요. [4] 핫게익 15/12/04 06:49 66 1
    207
    [CPP] 참조자로 함수호출할 때, 궁금한점이 생겼습니다. [3] 본인삭제금지 핫게익 15/11/27 06:11 31 0
    206
    이 망할 tcl configure.sh는 어디서 구할 수 있는걸까요... [4] 본인삭제금지 핫게익 15/11/20 03:30 21 0
    [1] [2] [3] [4] [5] [6] [7] [8]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈