C++/디딤돌 C++

[C++ 소스] 동적 배열 클래스 (인덱스 연산자 중복 정의)

언제나휴일 2016. 12. 15. 13:40
반응형

[C++ 소스] 동적 배열 클래스 (인덱스 연산자 중복 정의)


DCArray.cpp

DCArray.h

Program.cpp



//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;

}


실행 결과

0 0 0 10 0 0 0 0 0 0 9



본문

[디딤돌 C++] 50. 인덱스 연산자 중복 정의





반응형