less than 1 minute read

🔭프로그램 설명

  • 클래스 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;
}


Tags: ,

Categories:

Updated: