#include<iostream>
int Sum(int a, int b) return a + b;
int Sum3(int a, int b, int c) return a + b + c;
int SumFloat(float a, float b) return a + b;
int main()
{
std::cout<< Sum(5, 3);
std::cout<< Sum3(3, 5, 8);
std::cout<< SumFloat(1.41, 3.14);
/...
}
위와 같이 비슷한 기능을 가진 여러 함수들을 사용하는 경우가 있을 수 있다.
위와 같이 단순한 계산이거나, 반복적으로 수행할 필요가 없는 작업들은 함수를 사용하지 않아도 해결될 수 있으나,
복잡한 연산능력을 필요로 하거나 반복적으로 사용할 필요가 있는 기능들은 함수의 사용이 필요하다.
위 처럼 기능이 비슷한 함수들 끼리 묶어서 관리하는 방법은 없을까?
이렇게 비슷한 기능을 가진 함수를 묶어서 관리할 수 있는 방법에는 함수 오버로딩이 있다.
함수 오버로딩이란, 기능이 비슷한 함수들을 동일한 이름으로 선언하는 대신
매개변수의 타입이나 갯수를 다르게 지정하여 상황에 따라 매개변수를 다르게 처리할 수 있는 기능이다.
위를 예시로 든다면, Sum이라는 함수 하나를 호출하면, 두 정수의 합, 세 정수의 합, 실수끼리의 합을 할 수 있도록
사용하면 굉장히 유용한데, 이를 함수 오버로딩 기능을 통해 해결할 수 있다.
#include<iostream>
int Sum(int a, int b) return a + b;
int Sum(int a, int b, int c) return a + b + c;
int Sum(float a, float b) return a + b;
int main()
{
int a = 3;
int b = 2;
int c = 5;
float d = 1.42;
float e = 2.28;
std::cout << Sum(a, b) << std::endl;
std::cout << Sum(a, b, c) << std::endl;
std::cout << Sum (d, e) << std::endl;
//출력값: 5 10 3.7
}
위 처럼 함수의 이름은 하나인데, 매개변수의 타입이나 갯수를 달리하는 함수들을 하나로 묶어 편리하게 사용할 수 있다.
내가 사용하는 IDE인 VisualStudio에서는 함수에 커서를 올려두면
오버로드된 함수들의 매개변수들을 하나씩 열람할 수 있다.
함수 오버로딩은 이름만 같다고 전부 오버로딩 되는 것이 아니다.
함수 오버로딩의 규칙에는
1. 함수의 이름이 동일할 것.
2. 매개변수의 데이터 타입 혹은 매개변수의 갯수가 서로 다를 것.
위의 2가지의 조건을 충족해야 함수의 오버로딩이 허용된다.
함수 오버로딩을 사용한다면 비슷한 작업을 수행하는 여러 함수가 있을 때, 첫번째 코드 처럼 각 함수에게
다른 이름을 붙이는 수고를 할 필요가 없어지고,
함수를 선언할 때 해당 함수의 기능과 관련이 있도록 네이밍하기 때문에 가독성 측면에서 매우 유리하다.
또한 해당 프로그램을 코딩하는 사용자들은 하나의 함수를 호출하기만 해도
여러 형태의 함수들을 호출할 수 있어 편의성이 증가한다.
'C++ 일기' 카테고리의 다른 글
| 13. 난수 발생 (0) | 2024.02.27 |
|---|---|
| 12. 열거형 타입 enum (0) | 2024.02.26 |
| 11 - 1. 함수 (2) | 2024.02.26 |
| 10. 배열 (array[]) (0) | 2024.02.23 |
| 9 - 2. 반복문 for (0) | 2024.02.23 |