[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 이상의 표준을 따릅니다.