[C++] 윤성우 열혈 - OOP 단계별 프로젝트 10단계 (템플릿 1)

Kim Dongil·2022년 12월 16일
0

C++

목록 보기
13/23

프로젝트 10단계의 도입

BoundCheckAccountPtrArray 클래스를 '클래스 템플릿' 으로 변경하려면 먼저 이름부터 바꿀 필요가 있다.
따라서 다음의 형태로 파일과 클래스의 이름을 변경하겠다.

  • 클래스 템플릿의 이름을 BoundCheckArray 로 정의한다.
  • 클래스 템플릿을 BoundCheckArray.h 에 정의한다.
  • AccountArray.h 와 AccountArray.cpp 를 삭제한다.

프로그램 설명

이미 정의된 배열 클래스를 클래스 템플릿으로 변경하는 것은 어려운 일이 아니다.
그리고 이로 인해서 변경되는 부분도 매우 제한적이기 때문에 어렵지 않게 이번 단계의 프로젝트를 완성할 수 있다.
앞서 언급했듯이 추가되는 파일은 다음과 같다.

  • BoundCheckArray.h

그리고 클래스 템플릿의 정의로 인해서 변경이 발생하는 파일은 다음과 같다.

  • AccountHandler.h

BoundCheckArray.h

#ifndef __ACCOUNT_ARRAY_H__
#define __ACCOUNT_ARRAY_H__
#include "Account.h"


template <class T>
class BoundCheckArray {
	T* arr;
	int arrlen;

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

public:
	BoundCheckArray(int len = 100);
	T& operator[] (int idx);
	T& operator[] (int idx) const;
	int GetArrlen() const;
	~BoundCheckArray();
};

template <class T>
BoundCheckArray<T>::BoundCheckArray(int len) : arrlen(len) {
	arr = new T[len];
}

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

template <class T>
T& BoundCheckArray<T>::operator[] (int idx) const {
	if (idx < 0 || idx >= arrlen) {
		cout << "Array index out of bound exception" << endl;
		exit(1);
	}
	return arr[idx];
}

template <class T>
int BoundCheckArray<T>::GetArrlen() const {
	return arrlen;
}

template <class T>
BoundCheckArray<T>::~BoundCheckArray() {
	delete[]arr;
}

#endif

AccountHandler.h

#ifndef __ACCOUN_HANDLER_H__
#define __ACCOUN_HANDLER_H__

#include "Account.h"
#include "BoundCheckArray.h"

typedef Account* Account_Ptr;
class AccountHandler {
	BoundCheckArray<Account_Ptr> accArr;
	int accNum;

public:
	AccountHandler();
	void ShowMenu() const;
	void MakeAccount();
	void DepositMoney();
	void WithdrawMoney();
	void ShowAllAccInfo() const;
	~AccountHandler();

protected:
	void MakeNormalAccount();
	void MakeCreditAccount();
};
#endif

0개의 댓글

관련 채용 정보