티스토리 뷰

LANGUAGE/C++

[C++] OVERROADING

진심스테이크 2018. 3. 6. 15:30

 

오버로딩 : 동일한 함수명으로 여러개의 함수를 제공

 

조건

1. 함수명은 같지만, 매개변수의 타입이나 갯수가 달라야한다

2. 리턴 타입은 상관없다

 

 

종류

1. 명시적 오버로딩 : 함수명은 같고, 매개변수나 파일의 갯수에 의해 구별

ex) void disp ( int a, int b );

     void disp ( int a );

     void disp ( );

=> 함수가 3개

 

2. 암시적 오버로딩 : 한개의 함수로 여러개를 표현

- default 인자 값을 가질 수 있다 -> 내가 어떤 값을 주겠다

ex) void disp ( int a = 0, int b = 0 );

=> 명시적 오버로딩의 예시를 하나로 만든것

    disp ( 10, 20 );

    disp ( 10 ); // disp ( 10, 0 );

    disp ( ); // disp ( 0, 0 );

=> 3가지 다 위에 선언된 함수를 받아 사용된다

 

장점 : 코드가 간단해진다

 

주의 사항

  1. 디폴트 인자값 + 1만큼 호출 가능하다

  2. 명시적 오버로딩과 암시적 오버로딩을 같이 사용하면 안된다

     ex) disp ( int a=0, int b=0, int c=0 );

          disp ( ); // 충돌이 일어나서 ERROR 

  3. 내가 초기값을 준 위치부터 뒤에까지는 무조건 초기값을 줘야 한다

     ex) disp ( int a, int b=0, int c=0 ); // 가능

          disp ( int a=0, int b, int c=0 ); // 오류

 


 

명시적 오버로딩

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;

//명시적 오버로딩
void disp(int x, int y);
void disp(char x, char y);
void disp(float x, float y);

void main() {
    int a = 1, b = 2;
    char c = 'a', d = 'b';
    float e = 3.2f, f = 4.7f;

    disp(a, b);
    disp(c, d);
    disp(e, f);
}

void disp(int x, int y) {
    cout << x << "\t" << y << endl;
}

void disp(char x, char y) {
    cout << x << "\t" << y << endl;
}

void disp(float x, float y) {
    cout << x << "\t" << y << endl;
}

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
 
//암시적 오버로딩
void disp(int a = 0int b = 0int c = 0); //선언부에 초기값을 줘야함
 
void main() {
    int a = 10;
    int b = 20;
    int c = 30;
 
    disp();
    disp(a);
    disp(a, b);
    disp(a, b, c);
}
 
void disp(int a, int b, int c) { //여기에서 초기값을 주면 ERROR
    cout << a << "\t" << b << "\t" << c << endl;
}
cs

'LANGUAGE > C++' 카테고리의 다른 글

[C++] THIS  (0) 2018.03.08
[C++] CLASS  (0) 2018.03.07
[C++] POINTER ARRAY - 포인터 배열  (1) 2018.03.06
[C++] DYNAMIC MEMORY - 동적 메모리  (0) 2018.03.06
[C++] POINTER - 포인터  (0) 2018.03.05
댓글