안녕하세요 이번시간에는 STL에 필요한 주요 연산자 오버로딩에 대해 배워보겠습니다.


첫번째로 함수 호출 연산자 오버로딩(()연산자)에 대해 알아 보겠습니다.

함수 호출 연산자 오버로딩은 객체를 함수처럼 동작하게 하는 연산자입니다.

C++에서 Print(10)이라는 함수 호출 문장은 다음 세 가지로 해석할 수 있습니다.

1. 함수호출 : Print가 함수 이름

2. 함수포인터 : Print가 함수 포인터

3. 함수 객체 : Print가 함수 객체

여기서 함수 호출 연산자를 정의한 객체를 함수 객체라 합니다.

예제를 통해 쉽게 이해해 보도록 하겠습니다.


두번쨰로 배열 인덱스 연산자 오버로딩([]연산자)에 대해 알아 보도록하겠습니다.

배열 인덱스 연산자 오버로딩을 사용하면 배열에 사용하는 []연산자를 객체에도 사용할 수 있습니다.

[]연산자 오버로딩은 일반적으로 많은 객체를 저장하고 관리하는 객체에 사용됩니다.

예제를 통해 쉽게 이해해 보도록 하겠습니다.

@

pt[0]는 pt.operator[](0)을 호출해 pt.x값을 반환 받습니다.

[]연산자 오버로딩은 일반적으로 컨테이너 객체에 사용됩니다. 컨테이너 객체가 곤리하는 내부 원소에 접근할 때 사용됩니다.



세번째로 ->연산자 오버로딩에 대해 알아보겠습니다.

예제를 보시겠습니다.

p1->Print()는 p1.operator->()함수를 호출해 ㅔ1 내부에 보관된 실제 포인터를 반환 받고 이 포인터를 이용해 실제 point의 멤버 함수를 호출합니다.


이상으로 연산자 오버로딩에 대한 포스팅을 마치겠습니다.

궁금하신점이나 오류가 있으면 댓글남겨주세요 ~

다음시간에 함수 포인터에 대해 다뤄보겠습니다.




<작성자 - CODER_CJH>

<참고자료 - 뇌를 자극하는 C++STL>

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

6. 템플릿  (0) 2016.06.01
5.함수 객체  (0) 2016.06.01
4. 함수 포인터  (1) 2016.06.01
2. 연산자오버로딩(1)  (0) 2016.06.01
1. STL에 들어가기 앞서...  (1) 2016.06.01

첫번째 포스팅에 이어 바로 연산자 오버로딩 포스팅을 하겠습니다.

C++, JAVA를 한번쯤 공부해 보신분들은 오버로딩이라는 단어를 많이 들어 보셨을거라 생각합니다.

다시 살펴보도록 하겠습니다. 매우 중요한 개념이므로 꼭 숙지하고 넘어가시기 바랍니다.!

오버로딩(중복정의) : 하나의 클래스 내에서 이름이 같은 여러 개의 메서드를 정의한 것.(매개변수가 다름- 매개변수의 수, 배치순서)

오버라이딩(재정의) : 상속관계에 있을 때 부모로 부터 상속받은 기능 즉 메서드가 기능적으로 불필요한 경우에 자식클래스가 다시 정의하는 것

(이름이 같아야함, 매개변수가 같아야함, 리턴타입이 같아야함)


그렇다면 연산자 오버로딩은 무엇일까요?

 : C++에서 제공하는 기본 타입이 아닌 클래스 타입, 즉 사용자 정의 타입에도 연산자를 사용할 수 있게 하는 문법.

      

        예제를 통해 익혀보도록 하겠습니다.

       

        기본적으로 컴파일러에 연산이 정의되어 있기 떄문에 가능합니다.

  

  그러나 위에 예시를 보면 p1+p2에 에러가 나는 것을 볼수 있는데요 이는 사용자가 정의한 클래스에 대한 연산을 컴파일러가 알고 있지 않기 때문입니다. 따라서 연산자 오버로딩을 통해 컴파일러 내부에 정의되지 않은 타입의 연산을 가능하게 할 수 있습니다.


자 이제 연산자 오버로딩을 정의하고 사용해 보도록 하겠습니다

위 코드의 출력 결과는 어떻게 될까요?

@ 

Point 객체의 +연산자를 정의한 함수가 호출 되었습니다.

그렇다면 이제 operator+()의 내부를 정의 해 보겠습니다

두 Point객체 p1과 p2를 더하는 것은 p1의 x와 p2의 x를 더하고 p1의 y와 p2의 y를 더한다는 의미입니다. 

    @ 


이렇게 연산자 오버로딩은 컴파일러와 약속된 함수를 이용해 사용자 정의 타입에 연산이 가능하도록 제공하는 것입니다.

기본적인 연산자 오버로딩에 대한 개념이 잡히셨나요?
다음시간에는 STL에 필요한 주요 연산자 오버로딩에 대해 알아 보도록 하겠습니다.





<작성자 - CODER_CJH>
<참고자료 - 뇌를 자극하는 C++ STL>



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

6. 템플릿  (0) 2016.06.01
5.함수 객체  (0) 2016.06.01
4. 함수 포인터  (1) 2016.06.01
3. STL에 필요한 주요 연산자 오버로딩(2)  (4) 2016.06.01
1. STL에 들어가기 앞서...  (1) 2016.06.01

안녕하세요 C++파트를 맡고있는 시그마알파 얼굴 담당 입니다.

작년 여름에 시그마알파를 만들고 바로 블로그를 하려했으나 다들 바쁜관계로 하지못했습니다.

오늘 2016년 6월 1일 새로운 마음으로 시작해보려합니다.


제가 가장 먼저 다룰 내용은 C++라이브러리 STL입니다.

STL은 Standard Template Library의 약자로 C++에서 제공하는 표준 라이브러리입니다.


그렇다면 왜 STL을 알아둬야할가요?

바로 여러 장점을 가지고 있기 때문입니다.

첫째. 일반화를 지원할 수 있습니다.

둘쨰. 컴파일 타임의 매커니즘을  사용하므로 실행시 효율 저하가 거의 없습니다.

셋째. 표준으로 정해놨기 때문에 이식성이 좋습니다.

넷쨰. 소스가 공개되있어 확장성이 좋습니다.

보셨다시피 이러한 장점을 가지고 있는데 사용안할 수 없겠죠?


STL을 배우기 전에 꼭알아 야 될 문법이 몇개 있는데요

1. 연산자 오버로딩

2. 함수 포인터

3. 함수 객체

4. 템플릿

C++을 공부하셨다면 다들 아실거라 생각합니다. 그러나 복습차원에서 다시 공부하고 STL에 학습에 들어가도록 하겠습니다.




<작성자 - CODER_CJH>

<참고자료 - 뇌를 자극하는 C++ STL>

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

6. 템플릿  (0) 2016.06.01
5.함수 객체  (0) 2016.06.01
4. 함수 포인터  (1) 2016.06.01
3. STL에 필요한 주요 연산자 오버로딩(2)  (4) 2016.06.01
2. 연산자오버로딩(1)  (0) 2016.06.01

+ Recent posts