이번에는 인덱스 연산자 중복 정의를 살펴보기로 해요.
배열과 같은 컬렉션은 인덱스 연산을 통해 원소에 접근할 수 있게 사용자 편의를 제공하곤 합니다. 배열의 인덱스 연산의 결과는 좌항에 올 수도 있기 때문에 연산 결과는 원소 자체를 의미합니다.
만약 정수 형식의 데이터를 원소로 하는 배열 클래스를 정의하고 인덱스 연산자를 중복 정의한다면 원소 자체를 반환하게 구현해야 하므로 다음과 같이 정의합니다.
int &operator[](int index);//인덱스 연산자 중복 정의
다음은 인덱스 연산을 중복 정의하여 정수 형식의 데이터를 보관하는 DCArr 클래스를 정의하고 이를 사용한 예제 코드입니다.
//DCArray
#pragma once
class DCArray
{
int *base;
int bcapacity;
int usage;
public:
DCArray(int usage=0,int data=0);
DCArray(const DCArray &src);//복사 생성자
~DCArray();//소멸자
void Copy(const DCArray &src);//src 개체를 복사
DCArray &operator=(const DCArray &src);//= 연산자 중복 정의
int &operator[](int index);//인덱스 연산자 중복 정의
bool IsAvailIndex(int index)const;
private:
void Init();
};
//DCArray.h
#include "DCArray.h"
DCArray::DCArray(int usage,int data)
{
Init();
if(usage)
{
base = new int[usage]; //bcapacity개수의 int 형식을 동적으로 생성
bcapacity = usage;
}
for( ;this->usage<usage; this->usage++) //data를 usage만큼 보관
{
base[this->usage] = data;
}
}
DCArray::DCArray(const DCArray &src)
{
Init();
Copy(src);
}
DCArray::~DCArray()
{
if(base)
{
delete[] base;
}
}
void DCArray::Copy(const DCArray &src)//src 개체를 복사
{
bcapacity = src.bcapacity;
if(base)
{
delete[] base;
}
base = new int[bcapacity];
usage = src.usage;
for(int i = 0; i<usage;i++)
{
base[i] = src.base[i];
}
}
DCArray &DCArray::operator=(const DCArray &src)//= 연산자 중복 정의
{
Copy(src);
return (*this);
}
int &DCArray::operator[](int index)
{
if(IsAvailIndex(index))
{
return base[index];
}
throw "유효하지 않은 인덱스를 사용하!!!";
}
bool DCArray::IsAvailIndex(int index)const
{
return (index>=0)&&(index<usage);
}
void DCArray::Init()
{
base = 0;
bcapacity = usage = 0;
}
//인덱스 연산자 중복 정의
//Program.cpp
#include "DCArray.h"
#include <iostream>
using namespace std;
int main()
{
DCArray dcarr(10);//저장소의 크기가 10인 동적 배열 선언
dcarr[3] = 10;
dcarr[9] = 9;
for(int i = 0; i<10;i++)
{
cout<<dcarr[i]<<" ";
}
cout<<endl;
return 0;
}
'언어 자료구조 알고리즘 > 디딤돌 C++' 카테고리의 다른 글
[C++] 55. string 클래스 흉내내기1 (0) | 2016.04.25 |
---|---|
[C++] 54. 개체 출력자 (0) | 2016.04.25 |
[C++] 53. iostream 흉내내기 (0) | 2016.04.25 |
[C++] 52. 함수 개체 (0) | 2016.04.25 |
[C++] 51. 묵시적 형 변환 연산자 중복 정의 (0) | 2016.04.25 |
[C++] 49. 대입 연산자 중복 정의 (0) | 2016.04.25 |
[C++] 48. 증감 연산자 중복 정의 (0) | 2016.04.25 |
[C++] 47. 클래스에 연산자 중복 정의 (0) | 2016.04.25 |
[C++] 46. 전역 연산자 중복 정의 (0) | 2016.04.25 |
[C++] 45. 연산자 중복 정의 개요 (0) | 2016.04.25 |