본문 바로가기

Programming/ C++

(C++) 오버로딩(overloading)이란??

728x90
반응형

 

 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 = 0int 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

 

 

반응형