[c++] 가상 함수
C++에서 가상 함수는 상속 관계에 있는 클래스들에서 다형성을 구현하는 데 사용됩니다. 가상 함수를 통해 파생 클래스에서 기본 클래스의 함수를 오버라이딩할 수 있습니다. 이를 통해 런타임 시에 올바른 버전의 함수가 호출됩니다.
가상 함수의 선언
가상 함수는 기본 클래스에서 virtual
키워드를 사용하여 선언됩니다.
class Base {
public:
virtual void func() {
// 기본 구현
}
};
파생 클래스에서 기본 클래스의 가상 함수를 오버라이딩하려면 virtual
키워드를 사용할 필요가 없습니다. 그러나 사용하는 것을 권장합니다.
class Derived : public Base {
public:
void func() override {
// 파생 클래스의 구현
}
};
가상 함수의 동작
가상 함수는 기본 클래스와 파생 클래스의 포인터 또는 참조를 통해 호출될 때 실제 객체의 형식에 따라 적절한 함수가 호출됩니다.
Base* basePtr = new Derived();
basePtr->func(); // 파생 클래스의 func()이 호출됨
순수 가상 함수
순수 가상 함수는 본문이 없는 가상 함수로, 반드시 파생 클래스에서 오버라이딩해야 합니다. 이를 위해 = 0
을 붙입니다.
class AbstractBase {
public:
virtual void pureVirtualFunc() = 0;
};
순수 가상 함수를 가진 클래스는 추상 클래스이므로 인스턴스화할 수 없습니다.
C++에서 가상 함수를 이용하면 객체 지향 프로그래밍의 다형성을 쉽게 구현할 수 있습니다.
참조
위의 예시 코드는 C++11 이상의 표준을 따릅니다.