[c++] 함수 오버로딩과 함수 객체
C++는 함수 오버로딩과 함수 객체를 통해 다형성을 지원합니다. 이 두 가지 개념은 코드의 유연성과 재사용성을 높여주는 중요한 기능들입니다.
함수 오버로딩
함수 오버로딩은 하나 이상의 함수가 동일한 이름을 가질 수 있도록 하는 기능입니다. 이때 함수의 시그니처(매개변수의 개수나 타입)가 서로 달라야 합니다. 함수가 호출될 때 전달되는 인자의 타입이나 개수에 따라 호출될 함수가 결정됩니다.
#include <iostream>
void print(int num) {
std::cout << "정수: " << num << std::endl;
}
void print(double num) {
std::cout << "실수: " << num << std::endl;
}
int main() {
print(5); // print(int) 호출
print(3.14); // print(double) 호출
return 0;
}
위의 예시에서 print
함수는 두 번 정의되어 있지만, 매개변수의 타입에 따라 다른 함수가 호출됨을 확인할 수 있습니다.
함수 객체
함수 객체는 함수 호출 연산자(operator()
)를 오버로딩하여 함수처럼 동작하도록 만든 객체입니다. 함수 객체는 클래스나 구조체로 구현되며, 상태를 유지할 수 있어 더 복잡한 동작을 구현할 수 있습니다.
#include <iostream>
class Adder {
public:
Adder(int num) : num(num) {}
int operator()(int val) {
return num + val;
}
private:
int num;
};
int main() {
Adder addFive(5);
std::cout << addFive(10) << std::endl; // 출력: 15
return 0;
}
위의 예시에서 Adder
클래스는 operator()
함수를 오버로딩하여 함수처럼 사용됩니다.
함수 오버로딩과 함수 객체는 C++에서 강력한 다형성을 제공하며, 이를 통해 코드의 재사용성과 가독성을 높일 수 있습니다.