[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 함수는 가상 함수로 선언되어 있고, DogCat 클래스에서 이를 오버로딩하고 있습니다. 이를 통해 Animal 포인터로 실제로는 DogCat 객체를 가리키더라도, 각각 다른 동작을 수행하도록 할 수 있습니다.

참고문헌: