BoundCheckAccountPtrArray 클래스를 '클래스 템플릿' 으로 변경하려면 먼저 이름부터 바꿀 필요가 있다.
따라서 다음의 형태로 파일과 클래스의 이름을 변경하겠다.
이미 정의된 배열 클래스를 클래스 템플릿으로 변경하는 것은 어려운 일이 아니다.
그리고 이로 인해서 변경되는 부분도 매우 제한적이기 때문에 어렵지 않게 이번 단계의 프로젝트를 완성할 수 있다.
앞서 언급했듯이 추가되는 파일은 다음과 같다.
그리고 클래스 템플릿의 정의로 인해서 변경이 발생하는 파일은 다음과 같다.
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