C언어에서는 동일한 이름의 함수가 정의되는 것을 허용하지 않는다.
하지만 C++에서는 함수호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하기 때문에 C++에서는 동일한 이름의 함수정의를 허용할 수 있다.
이러한 형태의 함수정의를 함수 오버로딩이라 한다.
다중 정의라고도 한다
함수 오버라이딩이랑 헷갈릴 수 있지만
함수 오버라이딩은 함수의 재정의라고 한다.
상속에서의 중요한 기능 중 하나이다.
힘수 오버로딩 : 다중 정의
함수 오버라이딩 : 함수의 재정의(상속에서 사용)
함수 이름, 매개변수의 타입으로 함수를 구분지음
(C언어에선 오로지 함수 이름으로만 함수를 구분지음)
#include <iostream>
using namespace std;
void MyFunc();
void MyFunc(char c);
void MyFunc(int a, int b);
int main()
{
MyFunc();
MyFunc('A');
MyFunc(12,13);
return 0;
}
void MyFunc()
{
cout << "MyFunc() called" << endl;
}
void MyFunc(char c)
{
cout << "MyFunc(char c) called\n" << "C = " << c << endl;
}
void MyFunc(int a, int b)
{
cout << "MyFunc(int a,int b) called" << endl;
cout << "a = " << a << "\nb = " << b << endl;
}
C++의 함수에선 디폴트 값을 설정할 수 있다.
#include <iostream>
using namespace std;
int Adder(int num1 = 5, int num2 = 10);
int main()
{
cout << Adder() << endl;
cout << Adder(1) << endl;
cout << Adder(1, 2) << endl;
return 0;
}
int Adder(int num1, int num2)
{
return num1 + num2;
}
Adder()
은 매개변수가 하나도 전달되지 않아서 디폴트 값은 5와 10이 더해져 15가 반환된다.
Adder(1)
은 매개변수가 하나 전달되는데 이때 1은 num1에 전달되어서 1+10이 즉 11이 반환된다.
Adder(1, 2)
은 순서대로 num1 = 1, num2 = 2가 전달되어 3이 출력된다.
함수 템플릿은 함수를 만드는 도구를 의미한다.
함수를 만드는 도구는 무엇으로 이뤄져서 만들지는 정하지는 않는다.
그래서 함수 템플릿이 만들어 내는 함수의 자료형도 결정되어 있지 않는다.
#include <iostream>
#include <cstring>
using namespace std;
template <typename T>
T Adder(T n1, T n2)
{
return n1 + n2;
}
int main() {
cout << Adder<int>(1, 2) << endl;
cout << Adder<double>(1.5, 2.5) << endl;
cout << Adder<int>(1.5, 2.5) << endl;
cout << Adder<double>(3.15, 2.75) << endl;
return 0;
}