바람이 머문 언덕

c++에서 새로 생긴 함수 오버로딩, 디폴트 함수,reference는 어떤 개념인가? 본문

컴퓨터 IT/C++ 언어

c++에서 새로 생긴 함수 오버로딩, 디폴트 함수,reference는 어떤 개념인가?

알 수 없는 사용자 2010. 1. 2. 23:13
반응형

c++에서 새로 생긴 개념   함수 오버로딩과 디폴트 인수 그리고  reference는 어떤 개념일까?  

함수 오버로딩
:
함수 오버로딩이라고 특별하게 어떤 것을 적어 주어야 하는게 아니고 이름이 같아도 전달인자가
다르면 C++에서는 다른 함수로 인식하게하여 전달인자가 다른 함수는 같은 이름을 사용해도 되게 만든 기능을
함수 오버로딩이라 한다.   
예) int add(int a, int b); float add(float a, float b);
위의 예처럼 정수와 실수를 더하는 두 함수처럼 전달이자가 다르기 때문에 함수이름을 같게 만들어도 c++에서는
서로 다른 함수로 인식하기 때문에 사용하는데 이상이 없다.

디폴프 인수 : C++에서는 디폴트 인수라는 또 하나의 편리한 기능을 제공 한다.
어떤 함수를 호출 할 때 어떤 특정 값은 거의 같은 값이 입력이 하거나 사용하지 않을 때  인수를 입력하시 않아도
함수가 알아서 특정 값을 알아서 입력 하도록 디폴트 인수를 이용하면 편하다.
선언 예) int max(int a, int b, int c = 0, int, d = 0, int f = 0);
호출 예) max(2, 3); max(3, 2, 5, 7); max(2,4, 0, 0, 5);
위의 예에서 5개의 int형 전달 변수 중 3개를 디폴트 인수로 사용 했기 때문에 2개 이상의 인수 값만 전달 해주면 된다.
사용 빈도가 낮은 인수 낮은 거부터 오른쪽에 선언 해주면 좋다.
그리고 디폴트 인수는 함수의 플로트 타입을 선언해 주는 곳에서 적어 주면 된다. ㅊ

reference(포인트 참조형 변수) :  
reference를 설명하기 전에 번저 선언 예를 보자.
예) int i;  int &k = i; 
위의 예 처럼 int형 변수 i와 int형 reference변수 k를 선언하여 k에 i를 대입 했다.
이 것은 k에 i값을 넣어라는게 아니라 i와 똑같은 주소를 가르기는 변수 k를 만들어라는 명령이다.
똑 같은 주소를 가르키다는 것은 변수 이름만 다르지 같은 곳을 가르키는 가명을 하나 만들었다고 생각하면 된다.
그럼 이 기능을 어떻게 사용 할까?

예를 들기 위해서 아래 포인트를 사용하는 함수와  reference를 사용하는 변수를 만들었다.
포인트 변수의 값이 바꾸면 포인트가 가르키고 있는 주소의 갑도 변경된다.
reference 변수도 포인트와 마찬가지로 reference변수 값이 바뀌면 함수를 호출 할 때 전달한 인자의 값도 따라 바뀐다.

#include <stdlib.h>
void  operation(int *a, int *b, int *c, int *d);
void  operation(int &a, int &b, int &c, int &d);

int main(void)
{
     int a  =1, b = 2, c = 3, d = 4;
     operation(&a, &b, &c, &b);
     printf("a=%d b=%d c=%d  \n", a, b,c);

     a  =1, b = 2, c = 3, d = 4;
     operation(a, b, c, b);
     printf("a=%d b=%d c=%d  \n", a, b,c);
    system("PAUSE");

}
// 함수는 리턴 할 수 있는 값이 한개 뿐이기 때문에 a, b, c의 변경 된 값을 전달 받기 위해 c에서는 포인트를 많이
// 이용 했는데 포인트에 저장 된 값을 이용 할여면 *를 적어 주어야 해서 귀찮았다.
void  operation(int *a, int *b,int *c,int *d)
{
    *a = *a + *b + *c + *d;
    *b = *a - *b + *c + *d;
    *c = *a * *b - *c * *d;
}
// c++에서 reference라는 새로운 개념을 생겨서 편해졌다.
void  operation(int &a, int &b,int &c,int &d)
{
    a = a + b + c + d;
    b = a - b + c + d;
    c = a * b - c * d;
}