카테고리 없음

c++ virtual function

code911 2025. 2. 17. 21:21

virtual 키워드에 대해 자세히 설명해드리겠습니다.

virtual은 C++에서 동적 바인딩(런타임 다형성)을 구현하는 핵심 키워드입니다. 주요 특징과 사용 목적은 다음과 같습니다:

  1. 동적 바인딩 (Dynamic Binding)
  • 프로그램 실행 중에 어떤 함수를 호출할지 결정
  • 기본 클래스의 포인터나 참조로 파생 클래스의 함수를 호출 가능
  1. 가상 함수 테이블 (vtable)
  • virtual 함수가 있는 클래스는 vtable을 가짐
  • 객체마다 vptr(가상 함수 테이블을 가리키는 포인터)를 가짐
  • 메모리와 성능에 약간의 오버헤드 발생

실제 예제를 통해 살펴보겠습니다:

 

 

이 예제에서 주목할 점들:

  1. virtual 소멸자
  • 기본 클래스의 소멸자를 virtual로 선언하여 적절한 정리를 보장
  • 메모리 누수 방지
  1. override 키워드
  • 가상 함수를 오버라이드한다는 것을 명시적으로 표시
  • 실수 방지와 코드 가독성 향상
  1. 순수 가상 함수 (pure virtual function)
  • virtual void move() = 0;와 같이 선언
  • 구현을 강제하며, 이를 포함한 클래스는 추상 클래스가 됨
  1. 동적 바인딩 vs 정적 바인딩
  • virtual 함수 makeSound()는 동적 바인딩
  • 일반 함수 eat()는 정적 바인딩

이러한 virtual 메커니즘을 통해 C++에서는 다형성을 효과적으로 구현할 수 있습니다. 하지만 virtual 함수는 약간의 성능 오버헤드가 있으므로, 필요한 경우에만 사용하는 것이 좋습니다.


# 오버라이딩

오버라이딩(Overriding)은 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것을 말합니다. 구체적인 예제로 설명해드리겠습니다: