<aside> ❗ Operator는 연산자오버로딩에 사용함 = 사용자 연산자 재정의

</aside>

예를들어 어떤 사용자 정의 클래스가 있다고 가정하면

Point p1 = new Point();

Point p2 = new Point();

std::cout<<p1+p2;

p1,p2가 point클래스형식의 멤버이고 (+)가 어떤 식으로 작성하는지 컴파일러는 모르기 때문에

operator를 사용하여 (+)의 의미를 재정의(여기서는 +연산자의 오버로딩)해주는 것이다.

현재 만들고있는 DoublyLinkedList를 예로들어 설명해보겠다.

class DoublyLinkedList
{
private:
	int count;
	Node<T>* header;
	Node<T>* trailer;

public:
	class iterator
	{
	private:
		Node<T>* ptr;

	public:
		iterator() : ptr(NULL) {}
		iterator(Node<T>* p) : ptr(p) {}

		T& operator*() { return ptr->data; }

		iterator& operator++()	// ++it
		{
			ptr = ptr->next;
			return *this;
		}
	}
}

++연산자를 오버로딩하는 과정까지만 잘라서 가져왔다.

<aside> ❗ :(colon)연산자는 initialize list로 초기화에 쓰인다.

</aside>

현재 iterator class가 operator라는 레퍼런스를 가지기 때문에 초기화를 해주는 것이다.

iterator() : ptr(NULL) {}
//iterator를 Null값을 가지는 ptr포인터로 초기화한다는 뜻이다.