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)