[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
클래스를 부모 클래스로 하여 Circle
과 Rectangle
클래스가 상속하고, calculateArea
함수를 가상 함수로 정의합니다. 그 후, main
함수에서 Shape
클래스의 포인터를 사용하여 실제 객체의 타입에 따라 적절한 calculateArea
함수가 호출되는 것을 확인할 수 있습니다.
이러한 기능은 다형성(polymorphism)을 구현하고, 프로그램의 유연성을 향상시키는 데 도움이 됩니다.
더 자세한 내용은 아래의 링크를 참고하시기 바랍니다.
참고 자료:
- https://en.cppreference.com/w/cpp/language/virtual
- https://en.cppreference.com/w/cpp/language/inheritance