728x90
반응형
OVER LOAD(다중 정의)
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);
swap(da, db);
swap(pa, pb);
//컴파일러가 알아서 매개변수의 형에 적합한걸 찾아주므로, 이름이 같아도 결과가 맞게 나옴.
std::cout << "a : " << a << std::endl;
std::cout << "b : " << b << std::endl;
std::cout << "da : " << da << std::endl;
std::cout << "db : " << db << std::endl;
std::cout << "*pa : " << *pa << std::endl;
std::cout << "*pb : " << *pb << std::endl;
}
2.두 번째 예제
#include <iostream>
using namespace std;
int inventory[64] = { 0 };
int score = 0;
void getItem(int itemId, int cnt = 1, int sc = 0, int a = 7)
{
inventory[itemId] += cnt;
score += sc;
}
//cnt = 1,sc = 0을 해주었으므로
/*
아래 두개의 함수가 생략 가능하다.
void getItem(int itemId)
{
inventory[itemId]++;
}
void getItem(int itemId, int cnt)
{
inventory[itemId] += cnt;
}
*/
int main(void)
{
getItem(6, 5);
getItem(3, 2);
getItem(3);
getItem(11, 34, 7000);
cout << score << endl;
for (int i = 0; i < 16; i++)
{
cout << inventory[i] << ' ';
}
cout << endl;
}
함수 정의 컴파일 오류
다음과 같은 함수 정의에서 컴파일 오류가 나는 이유를 찾아보세요.
void drawRectangle(int I, int r, int t, int b)
{
}
void drawRectangle(int x = 0, int y = 0, int w, int h )
{
}
1차 오류 : 매개변수는 오른쪽부터 주어야 하는데 왼쪽부터 주었으므로 오류가 발생한다. 그러므로 매개변수를 오른쪽으로 옮겨준다.
void drawRectangle(int w, int h, int x = 0, int y = 0)
2차 오류 : 두 함수의 매개변수 갯수가 같아 모호성으로 인해 2차 오류가 발생한다.
728x90
반응형