[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
가 정의되어 있고, Dog
와 Cat
클래스에서 이를 오버라이딩합니다. main
함수에서는 Animal
포인터를 사용하여 런타임에 Dog
와 Cat
객체를 생성하고, 각각의 makeSound
함수가 호출될 때 다르게 동작하는 것을 확인할 수 있습니다.
런타임 다형성은 유연하고 확장 가능한 코드를 작성하는 데 도움이 됩니다. 그러나 가상 함수의 오버헤드가 있을 수 있으므로 성능 상의 고려가 필요합니다.
참고 자료:
- https://en.cppreference.com/w/cpp/language/polymorphism