[c++] 가상 함수와 상속(inheritance)의 관계

가상 함수는 상속과 함께 사용될 때 매우 유용합니다. 가상 함수는 자식 클래스에서 재정의(override)될 수 있는 함수로, 런타임 시에 적절한 함수 버전을 호출할 수 있게 해줍니다. 만약 “도형” 클래스에 가상 함수로 “면적을 계산하는 함수”를 정의하고, 자식 클래스에서 이 함수를 재정의한다면, 각 도형의 실제 타입에 따라 올바른 함수가 호출됩니다.

아래는 C++에서 가상 함수와 상속을 사용하는 간단한 예제 코드입니다.

#include <iostream>

class Shape {
public:
    virtual void calculateArea() {
        std::cout << "Calculating area of the shape" << std::endl;
    }
};

class Circle : public Shape {
public:
    void calculateArea() override {
        std::cout << "Calculating area of the circle" << std::endl;
    }
};

class Rectangle : public Shape {
public:
    void calculateArea() override {
        std::cout << "Calculating area of the rectangle" << std::endl;
    }
};

int main() {
    Shape* shape1 = new Circle();
    Shape* shape2 = new Rectangle();

    shape1->calculateArea(); // 호출 시간에 Circle의 calculateArea가 호출됩니다.
    shape2->calculateArea(); // 호출 시간에 Rectangle의 calculateArea가 호출됩니다.

    delete shape1;
    delete shape2;

    return 0;
}

이 예제에서는 Shape 클래스를 부모 클래스로 하여 CircleRectangle 클래스가 상속하고, calculateArea 함수를 가상 함수로 정의합니다. 그 후, main 함수에서 Shape 클래스의 포인터를 사용하여 실제 객체의 타입에 따라 적절한 calculateArea 함수가 호출되는 것을 확인할 수 있습니다.

이러한 기능은 다형성(polymorphism)을 구현하고, 프로그램의 유연성을 향상시키는 데 도움이 됩니다.

더 자세한 내용은 아래의 링크를 참고하시기 바랍니다.

참고 자료: