[내일배움캠프 Day32] 가상 함수 동작 원리

2025. 2. 4. 23:51·내일배움캠프/TIL

C++의 가상 함수 동작 원리

가상 함수는 'vtable', 혹은 가상 테이블(virtual table)에 의존한다.

 

어떤 클래스의 함수가 virtual로 선언되어 있으면, 해당 클래스의 가상 함수 주소를 보관하는 vtable이 만들어진다. 컴파일러는 또한 해당 클래스의 vtable을 가리키는 vptr이라는 숨겨진 변수(hidden variable)를 해당 클래스에 추가한다.

하위클래스가 상위 클래스의 가상 함수를 오버라이드(override)하지 않으면 하위 클래스의 vtable은 상위 클래스의 가상 함수 주소를 보관한다. 이 vtable을 사용하여 가상 함수가 호출될 때 어느 주소에 있는 함수가 호출되어야 하는지를 결정한다. c++의 동적 바인딩(dynamic binding)은 이 가상 테이블 메커니즘을 사용하여 실행된다. 

 

따라서 하위클래스 객체에 대한 포인터를 상위클래스 객체에 대한 포인터에 할당하면, vptr 변수는 하위클래스의 vtable을 가리킨다. 이렇게 배정되므로 최하위 클래스의 가상함수가 호출되는 것이다.

 

class Shape {
public:
	int edge_length;
    virtual int circumference () {
        cout << "Circumference of Base Class\n";
        return 0;
    }
};

class Triangle: public Shape {
public:	
	int circumference () {
    	cout << "Circumference of Triangle Class\n";
        return 3 * edge_length;
    }
};

void main() {
	Shape * x = new Shape();
    x->circumference();  // Circumference of Base Class 출력
    Shape * y = new Triangle();
    y->circumference();  // Circumference of Triangle Class 출력
}

 

위에서 circumference는 Shape 클래스의 가상 함수다. 따라서 모든 하위 클래스(Triangle 등)에서도 circumference는 가상 함수가 된다.

C++의 비가상 함수에 대한 호출은 컴파일 시간에 정적 바인딩을 통해 처리되지만, 가상 함수에 대한 호출은 동적 바인딩을 통해 처리된다.

 

 

출처 : 코딩 인터뷰 완전 분석 책

'내일배움캠프 > TIL' 카테고리의 다른 글

[내일배움캠프 Day35] 알고리즘 수업 1주차 과제  (3) 2025.02.07
[내일배움캠프 Day34] push_back과 emplace_back의 차이점  (2) 2025.02.06
[내일배움캠프 Day31] 순차 컨테이너  (3) 2025.02.03
[내일배움캠프 Day30] auto  (1) 2025.01.31
[내일배움캠프 Day29] 정렬  (1) 2025.01.27
'내일배움캠프/TIL' 카테고리의 다른 글
  • [내일배움캠프 Day35] 알고리즘 수업 1주차 과제
  • [내일배움캠프 Day34] push_back과 emplace_back의 차이점
  • [내일배움캠프 Day31] 순차 컨테이너
  • [내일배움캠프 Day30] auto
개발자 밍
개발자 밍
dev0404 님의 블로그 입니다.
  • 개발자 밍
    Developer
    개발자 밍
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 강의 (8)
        • UE Climbing System (3)
        • UE Dungeon (1)
        • HCI (4)
      • 책 (18)
        • 객체지향의 사실과 오해 (5)
        • Effective C++ (3)
        • 이득우의 게임 수학 (4)
        • 이것이 취업을 위한 컴퓨터 과학이다 (4)
        • 리뷰 (2)
      • C++ (2)
      • 알고리즘 (2)
      • 자료구조 (1)
      • Unreal (4)
      • 내일배움캠프 (52)
        • TIL (52)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    컴퓨터구조
    Effective
    게임수학
    자료구조
    객체지향
    내일배움캠프
    컴퓨터 구조
    c++
    그래픽스
    언리얼
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
개발자 밍
[내일배움캠프 Day32] 가상 함수 동작 원리
상단으로

티스토리툴바