반응형
가상 함수의 원리
- 가상 함수가 1개 이상 포함 되어 있으면 컴파일러가 객체 주소에 가상 함수 테이블 포인터가 추가함
- 가상 함수 테이블은 Class 별로 생성되어 RTTI 정보를 포함한 모든 가상함수 주소를 제공
- 상속 받은 클래스의 가상 함수 테이블은 기본적으로 기반 클래스의 가진 가상 함수 주소를 가르키지만 파생 클래스에서 override하여 구현한 함수에 대해서는 구현한 가상함수의 주소를 가르킴
- 가상함수 갯수가 많으면 오버헤드가 있음
class Animal
{
int age;
public:
virtual ~Animal() {}
virtual void foo() {}
virtual void goo() {}
};
class Dog : public Animal
{
int color;
public:
virtual ~Dog() {}
virtual void foo() override {}
};
int main()
{
Animal a1, a2;
Dog d1, d2;
Animal* p = &d1;
p->foo(); // 내부적으로 p->vtptr[?]() 호출
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 다운캐스팅(Down Casting), static_cast, dynamic_cast (0) | 2019.05.12 |
---|---|
C++ RTTI(Run Time Type Information), typeid, type_info (0) | 2019.05.12 |
C++ 함수 바인딩(Function Binding) (0) | 2019.05.12 |
C++ 인터페이스(Interface) (0) | 2019.05.12 |
C++ 추상 클래스(Abstract Class) (0) | 2019.05.12 |