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

[ 열혈C++ ] Chapter 11-2. 배열의 인덱스 연산자 오버로딩

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

# 배열클래스 : 배열의 역할을 하는 클래스

배열보다 나은 배열 클래스

 

배열 클래스의 예

ArrayClass.cpp
0.00MB

 

배열 클래스의 안전성 확보

 

const  함수를 이용한 오버로딩의 활용

 

문제 발생 : ShowAllData(arr);   에서 문제 발생

#include <iostream>
#include <cstdlib>
using namespace std;

class BoundCheckIntArray 
{
private:
	int * arr;
	int arrlen;

	BoundCheckIntArray(const BoundCheckIntArray& arr) { }
	BoundCheckIntArray& operator=(const BoundCheckIntArray& arr) { }

public:
	BoundCheckIntArray(int len) :arrlen(len)
	{
		arr=new int[len];
	}
	int& operator[] (int idx)
	{
		if(idx<0 || idx>=arrlen)
		{
			cout<<"Array index out of bound exception"<<endl;
			exit(1);
		}
		
		return arr[idx];
	}

	int GetArrLen() const 
	{
		return arrlen;
	}
	~BoundCheckIntArray()
	{
		delete []arr;
	}
};

void ShowAllData(const BoundCheckIntArray& ref)
{
	int len=ref.GetArrLen();

	for(int idx=0; idx<len; idx++)
		cout<<ref[idx]<<endl;
}

int main(void)
{
	BoundCheckIntArray arr(5);

	for(int i=0; i<5; i++)
		arr[i]=(i+1)*11;

	ShowAllData(arr);
	return 0;
}

 

객체의 저장을 위한 배열 클래스 1   [ 객체를 저장하는 방식 ]

StablePointObjArray.cpp
0.00MB

객체의 저장을 위한 배열 클래스 2   [ 객체주소를 저장하는 방식 ]

StablePointPtrArray.cpp
0.00MB