[열혈 C++] OOP 단계별 프로젝트 03단계 : 깊은 복사 생성자
🔭프로그램 설명
-
클래스 Account에 깊은 복사를 진행하는 복사 생성자를 정의해보고자 한다.
-
깊은 복사를 원칙으로 한다면, 클래스의 생성자만 봐도 복사 생성자의 필요성을 판단할 수 있다. 실제 복사 생성자의 호출여부는 중요하지 않다. 클래스는 그 자체로 완성품이 되어야 하기 때문에, 당장 필요한 것만으로 채우지 않는다.
🖥️구현
/*
* Banking System Ver 0.3
* author : YEJIN LEE
* contents : 깊은 복사 생성자
*/
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
enum { DEPOSIT = 1, WITHDRAW, CREATE, INQUIRY, EXIT };
const int NAME_LEN = 10;
class Account
{
public:
Account(int id, char* name, int balance);
Account(const Account& ref);
~Account();
private:
int m_Id; // 계좌번호
char* m_cpName; // 이름
int m_Balance; // 잔고
public:
int getID();
int getBalance();
char* getName();
void changeBalance(int money);
};
Account::Account(int id, char* name, int balance)
: m_Id(id), m_Balance(balance)
{
m_cpName = new char[strlen(name) + 1];
strcpy(m_cpName, name);
}
Account::Account(const Account& ref) //깊은 복사 생성자! char 포인터 형만 신경써서 해주면 된다
: m_Id(ref.m_Id), m_Balance(ref.m_Balance) {
m_cpName = new char[strlen(ref.m_cpName) + 1];
strcpy(m_cpName, ref.m_cpName);
}
Account::~Account()
{
delete[]m_cpName;
}
int Account::getID() {
return m_Id;
}
int Account::getBalance() {
return m_Balance;
}
char* Account::getName() {
return m_cpName;
}
void Account::changeBalance(int money) {
m_Balance = money;
}