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)
() 연산자의 오버로딩과 펑터(Functor)
함수를 객체화 가능
객체의 멤버함수를 함수로 호출
펑터(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;
}
}
}
}
};
임시 객체로의 자동형 변환
형 변환 연산자의 오버로딩
함수 반환값 X
return 은 존재
Point 객체의 오버로딩 정리
'열혈강의c++' 카테고리의 다른 글
[ 열혈C++ ] Chapter 12 string 클래스 (0) | 2022.07.21 |
---|---|
[ 열혈C++ ] OOP : 단계별 프로젝트 08/09단계 (0) | 2022.07.21 |
[ 열혈C++ ] Chapter 11장 연습문제 (0) | 2022.07.21 |
[ 열혈C++ ] Chapter 11-2. 배열의 인덱스 연산자 오버로딩 (0) | 2022.07.21 |
[ 열혈C++ ] Chapter 11-1. 반드시 해야 하는 대입 연산자의 오버로딩 (0) | 2022.07.21 |