C++/디딤돌 C++

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

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

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


DCArray.cpp

DCArray.h

Program.cpp



//DCArray.h

#pragma once

 

class DCArray

{

    int *base;

    int bcapacity;

    int usage;

public:

 

    DCArray(int _capa=0);

    DCArray(const DCArray &src);//복사 생성자   

    ~DCArray();//소멸자   

    void Copy(const DCArray &src);//src 개체를 복사

    DCArray &operator=(const DCArray &src);//= 연산자 중복 정의   

    void PushBack(int data);//순차 보관

    void List();//목록 출력

private:

    void Init();

};



//DCArray.cpp

#include "DCArray.h"

#include <iostream>

using namespace std;

 

DCArray::DCArray(int _capa)

{   

    Init();

 

    if(_capa)

    {       

        base = new int[_capa]; //bcapacity개수의 int 형식을 동적으로 생성       

    }   

    bcapacity = _capa;   

}

 

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

}

void DCArray::PushBack(int data)

{

    if(usage<bcapacity)//꽉 차지 않았을 때

    {

        base[usage] = data;

        usage++;//보관 개수 1 증가

    }

}

 

void DCArray::List()

{

    for(int i = 0; i<usage;i++)

    {

        cout<<base[i]<<" ";

    }

    cout<<endl;

}

 

void DCArray::Init()

{

    base = 0;

    bcapacity = usage = 0;

}


//대입 연산자 중복 정의(깊은 복사)

//Program.cpp

#include "DCArray.h"

 

int main()

{

    DCArray dcarr1(10);//저장소의 크기가 10인 동적 배열 선언

    dcarr1.PushBack(4);//순차 보관

 

    DCArray dcarr2(dcarr1);//복사 생성으로 동적 배열 선언

   

    dcarr1.List();

    dcarr2.List();

 

    dcarr1.PushBack(9);

    dcarr2.PushBack(6);

 

    dcarr1.List();

    dcarr2.List();

 

    DCArray dcarr3;

 

    dcarr3 = dcarr1;

    dcarr1.PushBack(10);

    dcarr3.PushBack(3);

    dcarr1.List();

    dcarr3.List();

 

    return 0;

}


실행 결과

4

4

4 9

4 6

4 9 10

4 9 3



본문

[디딤돌 C++] 49. 대입 연산자 중복 정의





반응형