Coding/C & C++

C++ 연산자 오버로딩 3(포인터 , (), 형 변환 연산자)

heyoon2j 2020. 3. 1. 22:02

 C++ 연산자 오버로딩 3(포인터, (), 형 변환 연산자)

ㆍ 포인터 연산자 오버로딩

- 포인터 연산자는 아래와 같다.

 ①  *   : 포인터가 가리키는 객체에 접근

 ②  -> : 포인터가 가리키는 객체의 맴버에 접근(주소 값 반환)

 

ex>

class SmartPtr

{

private:

     Point* posptr;

public:

     SmartPtr(Point* ptr) : posptr(ptr)

     {     }

     Point& operator*()

     {

         return *posptr;

     }

     Point* operator->()

     {

         return posptr;

     }

     ~SmartPtr()

     {

          delete posptr;

     }

}

* 위 예시는 간단한 스마트 포인터 예시이다.

 

 

ㆍ () 연산자 오버로딩

- () 연산자 오버로딩을 통해 함수처럼 동작하는 클래스를 만들 수 있다(펑터/Functor)

 

ex>

class SortRule

{

Public:

     virtual bool operator() (int num1, int num2) const =0;

};

 

class AscendingSort : public SortRule

{

public:

     bool operator() (int num1, int num2) const

     {

         if(num1>num2)

              return true;

         else

              return false;

     }

};

 

class DescendingSort : public SortRule

{

public:

     bool operator() (int num1, int num2) const

     {

        if(num1<num2)

              return true;

         else

              return false;

     }

};

 

 

ㆍ 형 변환 연산자 오버로딩

- 기본적으로 임시객체로의 자동 형 변환이 이루어진다.

   => 해당 데이터 또는 객체를 인자로 받아 임시객체를 생성해 변환한다. 

- 형 변환 연산자 오버로딩을 통해서 형 변환을 시킬 수 있다.

 

ex>

operator int ()     //  int형으로 형 변환해야 될 시 

{

     return num;

}

 

* 형 변환 연산자는 반환형을 명시하지 않는다. 하지만 return 문에 의한 값의 반환은 얼마든지 가능하다