viurtual function

C++의 virtual function (가상 함수) 개념

C++에서 가상 함수(virtual function) 는 다형성(polymorphism) 을 지원하기 위해 사용됩니다. 즉, 기반(Base) 클래스의 포인터 또는 참조를 사용하여 파생(Derived) 클래스의 함수가 호출되도록 하는 메커니즘 이다.

동적 바인딩(dynamic binding)

#include <iostream>
using namespace std;

class Base {
public:
    virtual void show() { // 가상 함수 선언
        cout << "Base 클래스의 show()" << endl;
    }
};

class Derived : public Base {
public:
    void show() override { // 오버라이딩된 함수
        cout << "Derived 클래스의 show()" << endl;
    }
};

int main() {
    Base* b = new Derived(); // 기반 클래스 포인터로 파생 클래스 객체를 가리킴
    b->show(); // "Derived 클래스의 show()" 출력 (가상 함수 덕분)

    delete b;
    return 0;
}

가상 함수를 구현하지 않는다면?

class Base {
public:
    virtual void show(); // 구현 없음!
};

class Derived : public Base {
public:
    void show() override {
        cout << "Derived 클래스의 show()" << endl;
    }
};

int main() {
    Base* b = new Derived();
    b->show();  // **링커 오류 발생**
    delete b;
}

참조 할 수 없는 함수를 참조하여 override 하려고 하기 때문에링커 오류 가 발생한다

순수 가상 함수 (Abstract Virtual Function)

추상 클래스(Abstract Class) 만약 특정 메서드가 파생 클래스에서 반드시 오버라이딩되도록 강제하고 싶다면, 순수 가상 함수(pure virtual function) 로 선언할 수 있다

class Base {
public:
    virtual void show() = 0; // 순수 가상 함수 -> 추상 클래스
};

int main() {
    Base obj; // ❌ 오류! (추상 클래스는 인스턴스 생성 불가능)
}

Base class