[C++ 소스] 동적 배열 클래스 (대입 연산자 중복 정의)
//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++ > 디딤돌 C++' 카테고리의 다른 글
[C++ 소스] 성적 클래스 (묵시적 형 변환 연산자 중복 정의) (0) | 2016.12.15 |
---|---|
[C++ 소스] 동적 배열 클래스 (인덱스 연산자 중복 정의) (0) | 2016.12.15 |
[C++ 소스] 성적 클래스 (증감 연산자 중복 정의) (0) | 2016.12.15 |
[C++ 소스] 학생 클래스 (== 연산자 중복정의, 클래스 내부에 정의) (0) | 2016.12.14 |
[C++ 소스] 학생 클래스 (== 연산자 중복정의, 교환법칙 적용) (0) | 2016.12.14 |