■ 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 문에 의한 값의 반환은 얼마든지 가능하다
'Coding > C & C++' 카테고리의 다른 글
C++ 예외처리 (0) | 2020.03.04 |
---|---|
C++ 템플릿 (0) | 2020.03.03 |
C++ 연산자 오버로딩 2(대입, 배열의 인덱스, new/delete 연산자) (0) | 2020.03.01 |
C++ 연산자 오버로딩 1(기본 연산자, 단항 연산자, << 연산자) (0) | 2020.02.26 |
C++ 가상 함수 (0) | 2020.02.25 |