C++ : 연산자 오버로딩(8) - 객체의 저장을 위한 배열 클래스
참고 : 열혈강의 C++ 프로그래밍 책
#include <iostream> #include <cstdlib> using namespace std; class APoint { private: int x, y; public: APoint(int px = 0, int py = 0) : x(px), y(py) { } friend ostream& operator<<(ostream& os, const APoint& pos); }; ostream& operator<<(ostream& os, const APoint& pos) { os << '[' << pos.x << ", " << pos.y << ']' << endl; return os; } // 객체의 주소값을 저장하기 위한 용도 typedef APoint* POINT_PTR; class APointArray { private: POINT_PTR* arr; int arrlen; APointArray(const APointArray& arr) { } APointArray& operator=(const APointArray& arr) { } public: APointArray(int len) : arrlen(len) { arr = new POINT_PTR[len]; } POINT_PTR& operator[] (int idx) { if(idx < 0 || idx >= arrlen) { cout << "Array index out of bound exception" << endl; exit(1); } return arr[idx]; } POINT_PTR& operator[] (int idx) const { if(idx < 0 || idx >= arrlen) { cout << "Array index out of bound exception" << endl; exit(1); } return arr[idx]; } int GetArrlen() const { return arrlen; } ~APointArray() { delete []arr; } }; // 테스트 void Operator8() { // 객체의 주소를 저장하면 얕은 복사와 깊은 복사를 신경쓰지 않아도 된다. APointArray arr(3); arr[0] = new APoint(3, 4); arr[1] = new APoint(5, 6); arr[2] = new APoint(7, 8); for(int i = 0; i < arr.GetArrlen(); i++) cout << *(arr[i]); for(int i = 0; i < arr.GetArrlen(); i++) delete arr[i]; }
댓글
댓글 쓰기