[c++] 런타임 다형성

런타임 다형성은 주로 상속과 가상 함수를 이용하여 구현됩니다. 예를 들어, 부모 클래스에 가상 함수를 정의하고 이를 자식 클래스에서 오버라이딩하여 다양한 동작을 구현할 수 있습니다. 런타임에 객체의 실제 타입을 파악하여 해당하는 함수를 호출함으로써 작동합니다.

아래는 간단한 예제 코드입니다.

#include <iostream>

class Animal {
public:
    virtual void makeSound() {
        std::cout << "Animal makes a sound" << std::endl;
    }
};

class Dog : public Animal {
public:
    void makeSound() override {
        std::cout << "Dog barks" << std::endl;
    }
};

class Cat : public Animal {
public:
    void makeSound() override {
        std::cout << "Cat meows" << std::endl;
    }
};

int main() {
    Animal* animal = new Dog();
    animal->makeSound();

    animal = new Cat();
    animal->makeSound();

    delete animal;

    return 0;
}

이 예제에서 Animal 클래스에 가상 함수 makeSound가 정의되어 있고, DogCat 클래스에서 이를 오버라이딩합니다. main 함수에서는 Animal 포인터를 사용하여 런타임에 DogCat 객체를 생성하고, 각각의 makeSound 함수가 호출될 때 다르게 동작하는 것을 확인할 수 있습니다.

런타임 다형성은 유연하고 확장 가능한 코드를 작성하는 데 도움이 됩니다. 그러나 가상 함수의 오버헤드가 있을 수 있으므로 성능 상의 고려가 필요합니다.

참고 자료: