가상 함수
가상함수는 런타임에 클래스의 다형성을 구성하기 위해 사용한다. 자식 클래스에서 부모 클래스의 함수를 재정의하지 않을 시 부모 클래스의 함수를 호출한다. 상속관계에서 is-A 관계로 부모 클래스 자료형에 자식 클래스를 할당했을 때 자식 클래스에서 오버라이딩한 함수가 있다 해도 포인터는 자료형을 기준으로 판단하기 때문에 부모 클래스의 함수를 호출한다. 이를 방지하기 위해 가상 함수를 사용한다.
c++
1 |
|
순수 가상 함수
자식 클래스에서 반드시 재정의가 필요한 가상 함수이다. virtual 키워드만 멤버로 가질 수 있다. 개발자에게 해당 클래스의 구현을 강제할 수 있다.
c++
1 |
|
가상 함수 테이블
클래스 내에 가상함수가 존재한다면 실제 객체가 가상함수를 실행할 때 어떤 주소의 함수를 실행시킬지에 대한 정보를 담은 테이블이다. 가상 함수 테이블은 클래스별로 생성된다.
가상 소멸자
자식 클래스를 소멸시킬 때 부모 클래스의 소멸자가 가상 소멸자가 아니라면 부모 클래스의 소멸자만 호출되고 memory leak이 일어난다. 이를 방지하기 위해 부모 클래스의 소멸자를 가상 소멸자로 지정하고 자식 클래스에서 소멸자를 선언해 자식 클래스도 소멸시켜야 한다.
c++
1 | // |