본문 바로가기
열혈강의c++

[ 열혈C++ ] Chapter 11-3. 그 이외의 연산자 오버로딩

by 어린왕자1234 2022. 7. 21.

new 연산자 오버로딩에 대한 상세한 이해

 

delete 연산자 오버로딩에 대한 이해와 예제

#include <iostream>
using namespace std;

class Point
{
private:
	int xpos, ypos;
public:
	Point(int x=0, int y=0) : xpos(x), ypos(y) {  }
	friend ostream& operator<<(ostream& os, const Point& pos);

	void * operator new (size_t size)
	{
		cout<<"operator new : "<<size<<endl;
		void * adr=new char[size];
		return adr;
	}

	void operator delete (void * adr)
	{
		cout<<"operator delete ()"<<endl;
		delete []adr;
	}
};

ostream& operator<<(ostream& os, const Point& pos)
{
	os<<'['<<pos.xpos<<", "<<pos.ypos<<']'<<endl;
	return os;
}

int main(void)
{
	Point * ptr=new Point(3, 4);
	cout<<*ptr;
	delete ptr;
	return 0;
}

 

operator new  &  operator  new  [ ]

ArrayNewDeleteOverloading.cpp
0.00MB

 

포인터 연산자 오버로딩   => 단항 연산자

PointerOperatorOverloading.cpp
0.00MB

 

스마트 포인터 (Smart Pointer)

SmartPointer.cpp
0.00MB

 

() 연산자의 오버로딩과 펑터(Functor)

함수를 객체화 가능

객체의 멤버함수를 함수로 호출

 

Functor.cpp
0.00MB

 

펑터(Functor)의 위력

class DataStorage    // for int data
{
private:
	int * arr;
	int idx;
	const int MAX_LEN;
public:
	DataStorage(int arrlen) :idx(0), MAX_LEN(arrlen)
	{
		arr=new int[MAX_LEN];
	}
	void AddData(int num)
	{
		if(MAX_LEN<=idx)
		{
			cout<<"더 이상 저장이 불가능합니다."<<endl;
			return;
		}
		arr[idx++]=num;
	}
	void ShowAllData()
	{
		for(int i=0; i<idx; i++)
			cout<<arr[i]<<' ';
		cout<<endl;
	}
	void SortData(const SortRule &functor)
	{
		for(int i=0; i<(idx-1); i++)
		{
			for(int j=0; j<(idx-1)-i; j++)
			{
				if(functor(arr[j], arr[j+1]))
				{
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
};

SortFunctor.cpp
0.00MB


임시 객체로의 자동형 변환

 

형 변환 연산자의 오버로딩

함수 반환값 X

return 은 존재

ConvToPrimitive.cpp
0.00MB

 


Point 객체의 오버로딩 정리

연산자 오버로딩.cpp
0.00MB
연산자 오버로딩.xlsx
0.18MB