[C++] 가상 함수 (다형성)

2024. 1. 15. 17:25·개발/C++

다형성의 문제점

 

  • 부모 클래스 포인터 변수로 자식 클래스 객체의 주소를 받았을 때 포인터가 부모 클래스 타입이기 때문에, 부모 클래스의 기능만 접근이 가능하다.

 

 

해결 방안

 

  • 가상 함수를 통해서 자식 클래스에서 오버라이딩 한 함수를 호출할 수 있게 한다.

 

 

가상 함수(Virtual)의 작동 원리

 

  • 부모 클래스에 가상 함수(virtaul 함수)가 1개 이상 존재하면 각 클래스(부모, 자식)는 타입 정보가 만들어진다.

 

  • 클래스에 대한 타입 정보는 메모리에 하나만 생성이 되고 이 타입 정보에는 해당 클래스가 보유하고 있는 가상 함수의 주소를 모아놓은 '가상 함수 테이블'이 있다.

 

  • '가상 함수 테이블'에 virtual이 붙은 함수가 등록이 된다.

 

  • 부모 클래스에 보이지 않는 멤버(가상 함수 테이블 포인터)가 추가된다.

 

  • 가상 함수 테이블 포인터는 타입 정보를 가리키는데 같은 클래스의 여러 변수를 만들면 이 변수들의 '가상 함수 테이블 포인터'는 같은 타입 정보를 가리킨다. (메모리에 하나만 존재하므로)

 

 

 

  • 가상 함수를 호출할 경우, 부모 클래스의 멤버인 '가상 함수 테이블 포인터'를 이용해서 '가상 함수 테이블'로 접근하여 등록이 되어있는 함수를 호출한다. (이 때 호출은 인덱싱으로 이루어짐)

 

 

 

 

 

 

 

'개발 > C++' 카테고리의 다른 글

[C++] 범위기반 for문  (0) 2024.02.28
'개발/C++' 카테고리의 다른 글
  • [C++] 범위기반 for문
Majangnan
Majangnan
  • Majangnan
    개발 모코코
    Majangnan
  • 전체
    오늘
    어제
    • 분류 전체보기 (55) N
      • 개발 (54) N
        • C# (10)
        • SQL (3)
        • Unity (8)
        • Unreal (10)
        • C++ (2)
        • Server (1)
        • DX11 (8)
        • 알고리즘 (11) N
  • 블로그 메뉴

    • 홈
    • 방명록
    • 깃허브
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    알고리즘
    MAC
    Mecanim
    언리얼
    C#
    백준
    슈팅게임
    Unity
    blueprint
    DX11
    3dlight
    UnReal
    DirectX11
    dx3d
    상속
    코딩테스트
    c++
    sql
    블루프린트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Majangnan
[C++] 가상 함수 (다형성)
상단으로

티스토리툴바