[c++] 가상 함수의 오버로딩(overloading)
가상 함수의 오버로딩을 구현하기 위해서는 기반 클래스에서 가상 함수를 정의하고 파생 클래스에서 해당 함수를 재정의해야 합니다. 이것을 통해 파생 클래스에서는 자체적인 구현을 제공하면서도 기본 클래스의 인터페이스를 유지할 수 있습니다.
가상 함수의 오버로딩은 다형성을 통해 유연하고 확장 가능한 코드를 작성하는 데 도움을 줄 수 있습니다. 이는 객체 지향 프로그래밍의 핵심 개념 중 하나이며 C++에서 강력한 기능으로 활용됩니다.
아래는 간단한 예제 코드입니다.
#include <iostream>
class Animal {
public:
virtual void makeSound() const {
std::cout << "Some sound";
}
};
class Dog : public Animal {
public:
void makeSound() const override {
std::cout << "Woof! Woof!";
}
};
class Cat : public Animal {
public:
void makeSound() const override {
std::cout << "Meow! Meow!";
}
};
int main() {
const Animal* animal1 = new Dog();
const Animal* animal2 = new Cat();
animal1->makeSound(); // Output: Woof! Woof!
animal2->makeSound(); // Output: Meow! Meow!
delete animal1;
delete animal2;
return 0;
}
위의 예제 코드에서 Animal
클래스의 makeSound
함수는 가상 함수로 선언되어 있고, Dog
와 Cat
클래스에서 이를 오버로딩하고 있습니다. 이를 통해 Animal
포인터로 실제로는 Dog
나 Cat
객체를 가리키더라도, 각각 다른 동작을 수행하도록 할 수 있습니다.
참고문헌:
- https://en.cppreference.com/w/cpp/language/virtual