c,c++ 오버로딩 용어 뜻좀...

c,c++ 오버로딩 용어 뜻좀...

작성일 2013.01.07댓글 2건
    게시물 수정 , 삭제는 로그인 필요

 공부하고 있는데 오버로딩이라는 말이 많이 나와서..연산자 오보러딩이라던데 등등많이 쓰는데

도무지 먼소린지 모르겠어요...설명좀 부탁들릴께요...



profile_image 익명 작성일 -

연산자 오버로딩을 알려면 우선 함수 오버로딩 개념을 알아야 합니다.

먼저 정수형 변수 두개를  더하고 출력하는 함수를 정의 해 봅시다

그런대 입출력값이 만약 실수형이라면 어떻게 될까요?

위코드의 결과값은 실수 -> 정수 변환과정에서 0.5값들이 떨어져 나가서 2.0이 출력 됩니다.
제대로 된 결과값을 출력하려면 실수형을 입력받는 함수가 따로 있어야겠지요

그래서  
라는 함수를 새로 만들었다고 합시다.

그럼 나중에 다른 타입들 즉 , float? short?...  등등 일일이 함수이름을 다 만들어야 할까요? 
다 똑같은 기능인데도 불구하고 이름을 따로 만들면 매우 귀찮고 가독성이 떨어지겠지요.

 따라서 이러한 상황을 극복 하고자 C,C++에선  함수 이름이 똑같고 입력값 타입만 다른 
같은 함수를 정의 할 수 있고  사용할 수 있는데  이것을 바로 함수 오버로딩이라고 합니다.

함수오버로딩의 또 다른 예로 부피구하는 함수를 들겠습니다.

세 함수 모두  부피를 구하는 함수 입니다. 각각 따로 함수이름을 만들필요없이
volume(10);     // 모서리 길이 10인 정육면체 부피
volume(5,20) ; // 밑면 반지름 5, 높이 20인 원통 부피
volume(3,4,5); // 밑면 폭 3, 밑면 높이 4, 깊이 5의  육면체 부피
로 사용할 수 있는 것입니다.


연산자 오버로딩은 함수 오버로딩의 일종으로 C에선 지원하지 않습니다.
C++에서만 사용할 수 있습니다.

C++에서 기본적으로 사용되는 각종 연산자(++,--, !, 등등)을 함수 오버로딩처럼 입력값에 
따라 다르게 행동 할 수 있도록 재정의 하는것을 연산자 오버로딩이라고 합니다.

연산자를 사용하는게 어떻게 함수호출처럼 되는지 의문이 드시겠지요

그럼 예를 들어 설명해 보겠습니다.


위의 코드를 컴파일 해면 에러나 나겠지요 a+b에서 +라는 것이 정의 되어있지 않기 때문입니다.
그럼 저 '+'부분을 재정의 하려면 기존의 정의에서 새롭게 '+'를 재정의 해야 된다는 것이지요


위와 같이 operator+() 를 다시 정의 해주면  Data class 에 대한 +연산자를 새롭게 정의하여 
사용할 수 있다는 것입니다. 

"Data d = a.operator+(b)"  부분을 주목해 보시면
'+'연산자를 호출하는것은 예제에서 새롭게 정의한 "opeator+()"라는
 함수를  Data class 타입의 b를 입력값으로  설정해서 호출 하는것과 동일한 기능이라는 
 것을 아실 수 있을겁니다.

따라서 앞서 보았던 "print_add(1,2)"를 함수 오버로딩 하여 "print_add(1.5,1.5)"를 사용 할 수
있었던 것처럼 "1+2" 의 '+'를 오퍼레이터 오버로딩 하여 "a+b"를  사용 할 수 있는 것입니다. 


profile_image 익명 작성일 -

int a = 3;
int b = 4;
int c;
c = a + b;

이렇게 정수를 더하면 잘됩니다.

 

그런데 문제는

class A
{
int m_int;
char m_char[20];
public:
A(int i, char *c)
{
m_int = i;
strcpy(m_char, c);
}

};
이렇게 클래스가 있다고 하고

A ca(3, "ha1");
A cb(4, "ha2");
A cc(5, "ha3");

cc = ca + cb;//<---이건 어떻게 더해줘야 할지 알수가 없습니다.

 

내부적으로 정수는 정수끼리 더하고 문자열은 문자열끼리
알아서 더해준다고 생각할지 모르지만 그런건 없습니다.

 

이 덧셈부분은 사용자가 만들어줘야 하는데 이걸 연산자 오버로딩(재정의)이라고 합니다.

 

c,c++ 오버로딩 용어 뜻좀...

... 따라서 이러한 상황을 극복 하고자 C,C++에선 함수... 연산자 오버로딩은 함수 오버로딩의 일종으로 C에선 지원하지 않습니다. C++에서만 사용할 수...

c++ 연산자 오버로딩 급합니다

... 연산자 오버로딩이 됩니까? 클래스 C 에서는... C++ 동영상 강의만 살짝 들었습니다. ㅋ 10일... 왠만한거 찾아서 공부 하시지 원하는게...

C++ 연산자 오버로딩 질문이요

... ostream& operator<<(ostream& os, const CMatrix4& c)//<<연산자 오버로딩 { for(int i=0; i<4; i++) { for(int j=0; j<4; j++) os<<"["<<c.data[i][j]...

c++ 에서 함수 오버로딩이 몬가요?

... 그냥 함수오버로딩의 뜻을 쉽게 알수있는 방법은 없을까요? 제가 함수오버로딩에... 저 또한 알기 쉬운 말로 기억하고 싶어서요~ c++잘하시는 분들~ 도움 주세요...

C++ 함수 오버로딩 질문

... 만약 함수인자를 int 로 사용해서 오버로딩을 추가한 경우, [code] void func(int a, int b) { int c = a * b; } [/code] 이렇게 자기와 딱 맞는 인자의...