객체언어의 특징중 하나인 다형성

함수의 다형성으로서 같은 이름의 함수가 디폴트 매개변수의 개수나 아니면 자료형이 다르다면

같은 이름의 함수를 사용하지만 다른 기능으로 이용할수 있다.

 

오버로딩의 사용하는 이유?

사실 이부분은 필자도 프로그래밍 처음 배울때 정말 궁금했던 부분이다. 

항상 이걸 왜써야하지 굳이 안써도 되는데 사실 이말도 틀린건 아니다.

하지만 우리는 프로그래밍을 하는 사람이라면 남들이 보았을때 여러 이름의 함수가 있는것보다

하나의 이름의 함수가 같은 기능의 함수들이 존재하는게  훨씬 편할것이다.

 

예를들어 Print() 함수가 있다고 가정해보자. 

Print함수는 외부에 데이터 값을 출력해주는 함수라고 가정해보자 

그러면 우리가 int형 ,string 형, char형... 등등 여러가지의 형태의 자료형이 존재한다.

여러 이름의 함수를 사용하면 PrintInt(), PrintString(),.... 이런식으로 계속해서 쓰이면 

얼마나 귀찮은가 그리고 어차피 출력문인데 같은 함수로 전부 통일하면 훨씬 편하지 않겠는가

그러면 Print 이 함수 하나로 모든 자료형을 출력이 가능해진다. 

이건 하나의 예시고 오버로딩은 프로그래밍을 하면할수록 정말 엄청나게 편리한 기능이라는거다. 

굳이 왜써야지가 아니라 오 이런 기능도 잇구나 하고 긍정적으로 받아들이는게

배우는 입장에선 엄청 좋은것같다. 어디까지나 필자의 생각이다. 

 

 

ex)

int Position(int x,int y);

int Position(int sum);

이 두함수는 같지만 매개변수(파라미터, 어규먼트)가 달라서 서로 다른 기능으로 사용할수 있다.

 

int Position(int x,int y){

   return x*y;

}

 

int Position(int sum){

   return sum+sum;

}

 

이런식으로 사용가능하다 .

하지만 주의점이 존재한다 .

 

ex)

double cube(double x);

double cube(double &x);

 

위의 함수를 보면 오버로딩 될것 같지만 될수가 없다

왜냐하면 

cube(x);

라고 가정해보자 

 

그러면 x가 double x 인지 double &x 전부 일치 해버린다.

그러면 이러한 모호한 관계가 되버려서 위의 두개의 함수중 어떠걸 사용하는지 알수가 없어진다.

 

그래서 어떤 자료형에 대한 참조와 자료형 자체를 같은것으로 간주한다. 

 

또하나 기능중 const에 따라 오버로딩이 구분된다. 

1.void dribble(char* bits);//오버로딩 된다

2.void dribble(const char*cbits);//오버로딩 된다

 

즉 처음에 선언해주는 데이터가 const를 가지고 선언된다면 

2번 함수를 사용하며 const가 없으면 1번함수를 참고합니다.

 

만약 void davl(char* bits); 함수가 존재시 

davl(const 매개변수(파라미터,어규먼트) );를 사용하면 

davl함수는 const 매개변수를 가진  대응하는 함수가 존재 하지 않습니다. 

void davl(char* bits); 함수를 이용하지 못합니다.

 

 

'프로그래밍언어 > C++' 카테고리의 다른 글

<c++>레지스터 변수  (0) 2020.10.15
<c++>decltype  (0) 2020.10.14
c++ array 탬플릿  (0) 2020.09.09
자동공간, 정적 공간 , 동적 공간(힙)(automatic ,static ,dynamic )  (0) 2020.09.08
strcpy, strcnpy 차이  (0) 2020.09.08

+ Recent posts