C++. ATM Project ver.6
11127 ワード
1.更新内容
기존 배열클래스(account array class)를 클래스 템플릿으로 재 정의 하여 다양한 반환형으로 배열객체에 접근할 수 있도록 한다.
2.更新理由
フラットオブジェクトにアクセスする場合、通常はアドレス値を使用してアクセスしますが、場合によってはオブジェクトのレプリケーション値のみが要求される場合があるため、シェイプ(type)の流動性を考慮してクラステンプレートとして再定義したい場合があります.さらに、2つの異なる[]演算子overload関数を既存のarrayclassに統合することで、クラスの簡潔性を得ることができます.
3.コード&説明
7つのヘッダファイルとソースファイルはすべてリストされません.変更あり
accountarray.h
accountarray.cpp
accounthandler.h
コメントしたコードだけで分析してみましょう
#include "account.h"
#include <iostream>
#pragma once
using namespace std;
/*클래스 템플릿*/
template <typename T>
class Accountarray
{
private:
T * arr;
// 복사생성자, 대입연산자 방지
int len;
Accountarray(Accountarray& Acopy);
Accountarray& operator=(Accountarray& Acopy);
public:
// 생성자 - 동적할당
Accountarray();
// []연산자 오버로드 함수, 하나로 통합! - 반환형을 자유롭게
T& operator[](int idx);
int Getlen();
// 소멸자
~Accountarray();
};
accountarray.cpp#include "string.h"
#include "accountarray.h"
#include <cstdlib> // exit function
#include "account.h"
// 클래스 템플릿 정의
/* template 선언 이후에..
1. 해당 클래스 템플릿 함수가 임의 형(type)를 필요로 하면 template <typename T>
2. 해당 클래스 템플릿 함수가 임의 형을 필요로 하지 않는 함수라면 template<>
으로 선언한다
*/
// 생성자
template <typename T>
Accountarray<T>::Accountarray()
:len(100)
{
arr = new T[100]; // 배열 동적할당, 임의형 T는 사용자로부터 입력되어야 하는 값
}
// []연산자 오버로드 함수
template <typename T>
T& Accountarray<T>::operator[](int idx)
{
// out of range
if (idx < 0 || idx >= len)
{
cout << "out of range" << endl;
exit(1);
}
// 배열의 idx번째 인자를 임시 T&형으로 반환한다.
return arr[idx];
}
// 소멸자
template <> // 함수 내에서 typename T가 필요하지 않은 경우
Accountarray<T>::~Accountarray()
{
delete []arr;
}
accounthandler.h#include "accountarray.h"
#include "account.h"
#pragma once
/*Controller class*/
class Accounthandler
{
private:
Accountarray<ACCOUNT_PTR> acc;
// Account의 포인터형인 ACCOUNT_PTR을 typename 'T'값으로 한 Accountarray 객체 acc를 생성
int acc_count; // 고객번호
public:
// 생성자
Accounthandler();
// 기능함수(메뉴, 생성, 입금, 출금, 조회)
void Menu();
void Make();
void Deposit();
void Withdraw();
void Show();
};
4.結果
結果はverです.5に示すように、添付ではなく、ヘッダファイルとソースファイルが保存されている完全なビューが表示されます.
5.結論
配列クラスをクラステンプレートとして再定義することで、定義を使用して複数のタイプのテンプレートクラス(互換性)を呼び出すことができます.しかし、このプロジェクトではあまり意味がないようで、防止と言える.
Reference
この問題について(C++. ATM Project ver.6), 我々は、より多くの情報をここで見つけました https://velog.io/@croco/ATM-Project-ver.6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol