[c++] 가상 함수의 오버라이드(override)와 오버로드(overload)의 차이

가상 함수의 오버라이드(Override)

가상 함수의 오버라이드는 객체 지향 프로그래밍에서 사용됩니다. 이것은 기존에 정의된 가상 함수를 파생 클래스에서 재정의하는 것을 의미합니다. 따라서 파생 클래스에서 기본 클래스의 가상 함수를 동일한 시그니처(함수 이름, 매개변수 목록, 상수성 등)로 다시 정의합니다. 이렇게 하면 런타임에 객체의 실제 유형에 따라 적절한 함수가 호출됩니다.

class Base {
public:
    virtual void print() {
        cout << "Base::print() called" << endl;
    }
};

class Derived : public Base {
public:
    void print() override {
        cout << "Derived::print() called" << endl;
    }
};

위의 코드에서 print() 함수는 기본 클래스(Base)에서 가상 함수로 선언되었고, 파생 클래스(Derived)에서 이를 오버라이드했습니다.

오버로드(Overload)

오버로드는 같은 이름을 가진 함수이지만 매개변수의 수나 데이터 형식이 다른 여러 함수를 정의하는 것을 의미합니다. 즉, 함수 오버로딩은 다양한 매개변수 목록에 따라 함수를 다시 정의하는 것입니다. 컴파일러는 함수 호출 시 전달된 매개변수를 기반으로 올바른 함수를 선택합니다.

void print(int num) {
    cout << "Printing integer: " << num << endl;
}

void print(string str) {
    cout << "Printing string: " << str << endl;
}

위의 코드에서 print 함수는 두 가지 버전으로 오버로드되었습니다. 하나는 정수를, 다른 하나는 문자열을 출력하도록 정의되어 있습니다.

따라서, 가상 함수의 오버라이드는 상속받은 가상 함수를 재정의하는 것이고, 오버로드는 같은 이름을 가진 함수를 다양한 매개변수로 다시 정의하는 것입니다.