Pages

Saturday, January 6, 2018

C/C++ 언어 프로그래밍-함수3

C/C++ 언어 코딩 복습 - 함수 3 (오버로딩: Overloading)

- 함수의 오버로딩 (Overloading) 에 대해 정리해보도록 하겠습니다. 프로그램을 작성하는데 비슷한 용도로 사용되는 함수들을 각각 정의해 사용하면 때로는 너무 많은 이름의 함수들이 생길 수 있습니다. 이러한 문제를 해결할 수 있는 것이 함수의 오버로딩 (Overloading) 입니다.

- 즉, 동일한 이름으로 함수를 여러번 (중복) 해서 정의를 할 수 있습니다. 이때 각각의 함수를 구별하기 위해서는 구분할 수 있는 정보 (signature) 를 사용자가 작성하여야 합니다. 방법으로는 같은 이름의 함수를 사용할 때 인자 (parameter) 의 개수 와 인자의 자료형을 다르게 주어 사용하는 것입니다.

- 앞장의 예제를 이용해 살펴보도록 하겠습니다. 앞장의 예제에서는 세가지 함수 t_f1, t_f2, t_f3 들의 이름을 다르게 하여 정의하였습니다. 이를 하나의 이름으로 다 바꾸도록 하겠습니다.

사용예시 :

기존 예제:
void t_f1();
void t_f2(int);
int  t_f3(int, int);

- 세가지 다른 이름의 함수들입니다. 이들을 'tF' 라는 하나의 이름으로 바꾸고 실행해보도록 하겠습니다.

예제코드

#include <iostream>
using namespace std;

void tF();
void tF(int);
int  tF(int, int);

int main() {
     cout << endl;
     cout << "##############################" << endl;
     cout << " Function overloading example " << endl;
     cout << "##############################" << endl;
     cout << endl;

     tF();
     int num, num2, num3 ;
     cout << "Enter a natural number between 0 and 10. : ";
     cin  >> num ;

     tF(num);
     num2 = 10 ;
     num3 = tF(num, num2);
     cout << num <<" + "<< num2 <<" = "<< num3 << endl;
     return 0;
}

void tF(){
cout << " No parameters and return values. " << endl;
}

void tF(int a){
       if(a > 5){
             cout<< a << " > 5 is true. "<<endl;
           }else{
        cout<< a << " <= 5 is true. "<<endl;
           }
}

int tF(int a, int b){
     int c ;
     c = a + b ;
     return c ;
}

- 앞의 예제와 한번 더 구분하기 위해 "Function overloading example" 이라는 문구가 출력되게 하였습니다. 다른 내용들은 앞장 예제와 같고 함수 이름만 'tF' 로 모두 변경하였습니다.

실행결과


- 실행을 하면 "Function overloading example" 이라는 문구가 먼저 출력되었습니다.

(1) 그리고 인자 및 리턴값이 없는 함수 'tF()' 의 결과로 " No parameters and return values. " 이라는 문장이 출력되었습니다.

(2) 정수형 인자 하나를 갖고 return 값이 없는 함수 'tF()' 의 결과로 0 과 10 사이의 자연수를 입력하라는 문장도 출력되었습니다. 여기에 2 을 입력하고 엔터키를 누르면 " 2 <= 5 is true. " 라는 문구가 나옵니다.

(3) 정수형 인자 두개를 갖고 return 값의 자료형이 정수형인 함수 'tF()' 의 결과로 " 2 + 10 = 12 " 이 출력되는 것을 확인할 수 있습니다. 

No comments:

Post a Comment