[c++] 함수 오버로딩과 동적 다형성
C++는 함수 오버로딩과 동적 다형성의 기능을 제공하여 강력한 프로그래밍 언어로써 다양한 상황에 유연하게 대응할 수 있습니다. 이번 글에서는 이 두 가지의 기능에 대해 자세히 살펴보겠습니다.
함수 오버로딩
함수 오버로딩은 한 클래스 내에서 함수 이름은 동일하지만 매개변수의 수나 타입이 다른 여러 개의 함수를 정의하는 것을 말합니다. 이를 통해 동일한 이름의 함수를 여러 번 정의할 수 있으며, 컴파일러가 매개변수에 따라 올바른 함수를 호출합니다.
아래는 함수 오버로딩의 예시입니다:
#include <iostream>
class OverloadExample {
public:
void print(int num) {
std::cout << "Integer number: " << num << std::endl;
}
void print(double num) {
std::cout << "Double number: " << num << std::endl;
}
};
int main() {
OverloadExample obj;
obj.print(5);
obj.print(5.5);
return 0;
}
위 예제에서 print
함수는 정수와 실수를 각각 출력하는 두 가지 오버로딩된 형태를 가지고 있습니다.
동적 다형성
동적 다형성은 상속 관계에 있는 클래스들 사이에서 부모 클래스의 포인터를 이용하여 자식 클래스의 메소드를 호출하는 기능을 말합니다. 이를 통해 미리 예측할 수 없는 상황에서도 적절한 메소드가 호출되어 유연한 프로그래밍이 가능합니다.
아래는 동적 다형성의 예시입니다:
#include <iostream>
class Shape {
public:
virtual void draw() {
std::cout << "Shape::draw()" << std::endl;
}
};
class Circle : public Shape {
public:
void draw() override {
std::cout << "Circle::draw()" << std::endl;
}
};
int main() {
Shape* shape1 = new Shape();
Shape* shape2 = new Circle();
shape1->draw(); // Shape::draw()
shape2->draw(); // Circle::draw()
delete shape1;
delete shape2;
return 0;
}
위 예제에서 Shape
클래스와 Circle
클래스는 상속 관계에 있고, draw
메소드가 동적으로 호출됩니다.
함수 오버로딩과 동적 다형성은 C++에서 다형성을 구현하는 강력한 기능으로, 유연하고 효율적인 프로그래밍을 가능하게 합니다. 이러한 기능을 적재적소에 활용하여 보다 효율적이고 유연한 코드를 작성할 수 있습니다.