C++
C++ 스타일 함수
코다람쥐
2021. 12. 21. 16:24
https://www.youtube.com/watch?v=8oAo31isO70&list=PLlJhQXcLQBJqywc5dweQ75GBRubzPxhAk&index=56
overload : 함수를 여러번 정의한다.
1. 매개변수 타입에 따른 오버로딩
#include <iostream>
void swap(int& a, int& b)
{
int tmp = a;
a = b;
b = tmp;
}
void swap(double& a, double& b)
{
double tmp = a;
a = b;
b = tmp;
}
void swap(int* (&a), int* (&b))
{
int* tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 20, b = 30;
double da = 2.222, db = 3.333;
int* pa = &a, * pb = &b;
swap(a, b);
std::cout << a << ' ' << b << std::endl;
swap(da, db);
std::cout << da << ' ' << db << std::endl;
swap(pa, pb);
std::cout << *pa << ' ' << *pb << std::endl;
}
함수의 이름이 같아도 매개변수가 다르면 오버로딩되었다고 한다.
컴파일러에서 자동으로 매개변수 형식에 맞게 함수를 호출해준다.
2. 매개변수 수에 따른 오버로딩
#include <iostream>
using namespace std;
int inventory[4] = { 0 };
int score = 0;
void getItem(int itemId)
{
inventory[itemId]++;
}
void getItem(int itemId, int cnt)
{
inventory[itemId] += cnt;
}
void getItem(int itemId, int cnt, int sc)
{
inventory[itemId] += cnt;
score += sc;
}
int main()
{
getItem(1);
getItem(2, 3);
getItem(3, 10, 500);
for (int n : inventory)
{
cout << n << ' ';
}
cout << endl;
cout << "score : " << score << endl;
}
void getItem(int itemId, int cnt = 1, int sc = 0)
{
inventory[itemId] += cnt;
score += sc;
}
위의 3개의 함수들을 하나로 묶어서 디폴트 매개변수를 주는 방식으로도 정의 할 수 있다.
이러면 여러 번 정의해야 할 것들을 1번만 정의해도 된다.
다만, 디폴트 매개변수는 오른쪽에 있어야한다.
잘못된 예시) void getItem(int a, int b=0, int c)
올바른 예시) void getItem(int a, int b, int c=0)