picture from Shutterstock
이전 C에서는 동일한 기능이나 형식이 다른 함수를 하나의 이름으로 쓰지 못하고 또다른 함수를 만들어 사용했습니다.
하지만, C++에서는 새로 만들지 않고도 같은 이름으로 여러기능을 할 수 있게 만들 수 있습니다. 또한 코드를 간략하게 짤 수 있습니다.
오버로딩(overloading)이란?
- 같은 이름을 가진 함수를 여러개 정의하는 것입니다.
but, 인수의 타입과 갯수가 달라야 합니다!
명시적 오버로딩 : 디폴트 값을 정해주지 않고 오버로딩하는 것
==코딩 예시==
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 |
#include<iostream>
using namespace std;
/*
오버로딩 : 동일한 함수명으로 여러개의 함수를 제공하는 방법
조건 : 매개변수의 타입이 달라야 한다.
매개변수의 갯수가 달라야한다.
리턴타입과 상관없다.
*/
void disp(char a, char b);
void disp(float a, float b);
void disp(int a, int b);
void main()
{
int a = 10, b = 20;
char c = 'a', d = 'b';
float e = 3.2f, f = 4.7f;
disp(a, b);
disp(c, d);
disp(e, f);
}
void disp(char a, char b) {
cout << a << "\t" << b << endl;
}
void disp(float a, float b) {
cout << a << "\t" << b << endl;
}
void disp(int a, int b) {
cout << a << "\t" << b << endl;
} |
cs |
(실행 결과)
암시적 오버로딩 : 디폴트값을 정해주고 오버로딩 하는 것
==코딩 예시==
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
#include<iostream>
using namespace std;
void disp(int a, int b = 0, int c = 0); //선언부에 초기화 해주어야 한다!!
void main() {
int a = 10;
int b = 20;
int c = 30;
//disp(); // a값을 지정해줘야 하기에 사용할 수 없음.
disp(a);
disp(a,b);
disp(a,b,c);
}
void disp(int a, int b, int c) {
cout << a <<"\t"<< b <<"\t" << c <<"\t"<< endl;
} |
cs |
※디폴트값은 선언부에 초기화 해주어야 함.
(실행 결과)
인수가 부족한 호출은 부족한 곳에 디폴트값을 넣어줍니다
※주의사항
1. 명시적 오버로딩과 암시적 오버로딩은 같이 안쓰는게 좋습니다.
(충돌을 피하기 위해)
ex)
void disp(int a = 0, int b = 0, int c = 0);
void disp( );
disp를 호출하게 되면 둘중 무엇을 호출해야 할지 모름(모호함) ==> 오류
2. 앞의 인수가 초기화되어있지 않을 때 뒤의 인수를 초기화하면 안됩니다.
ex)
void disp(int a = 0, int b = 0, int c); X
void disp(int a = 0, int b, int c = 0); X
void disp(int a, int b = 0, int c = 0); O
'Programming > C++' 카테고리의 다른 글
(C++) 생성자 함수란 무엇일까? (0) | 2018.03.08 |
---|---|
(C++) 성적 입/출력 다차원 프로그램 (0) | 2018.03.07 |
(C++) \t, 공백 언제까지 다 치고있을건가요? (setw) (3) | 2018.03.06 |
(C++) 성적 입/출력 프로그램 (0) | 2018.03.06 |
(C++) 표준 입/출력방법<cout, cin> (1) | 2018.03.06 |