◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!
예금계좌를 나타내는 클래스를 만들어보자.
/* >> Account클래스를 아래와 같은 규칙으로 작성하시오. - 고객아이디를 나타내는 int형 변수 id와 고객의 예치금을 나타내는 double형 변수 balance를 작성하고 모두 private으로 설정한다. - 기본 생성자는 없으며, int와 double을 입력받아 id와 balance를 초기화하는 생성자만든다. 단, 리스트 초기화를 이용하여 초기화한다. 또한 double입력은 디폴트값으로 0이 입력되도록 한다. - double을 입력받아 balance값에 더하는 입금함수 deposit을 만든다. - deposit함수는 0원이상의 금액을 입금받아야하며 입금 후 금액을 화면에 출력하도록 한다. - double을 입력받아 balance값에서 빼는 출금함수 withdraw를 만든다. - withdraw함수가 받는 입력값은 0원이상이어야 하며 출금 후 금액이 마이너스가 될 경우 출금을 취소한다. 출금 후 금액이 마이너스가 되지 않을 경우에는 정상적으로 출금을 하며, 출금 후 금액을 화면에 출력하도록 한다. - 고객의 아이디를 리턴하는 getId함수를 작성하되 멤버변수를 변경하지 못하도록 설정한다. - 고객의 예치금을 리턴하는 getBalance함수를 작성하되 멤버변수를 변경하지 못하도록 설정한다. - cout으로 예치금을 출력할 수 있도록 출력연산자를 오버로드한다. */ #includeusing namespace std; class Account { private: int id; double balance; public : Account(int _id, double _balance=0.0) : id(_id), balance(_balance) { cout << *this; } ~Account(){} int getId()const{return id;} double getBalance()const{return balance;} void deposit(double _balance); //저금하기 void withdraw(double _balance); //돈 찾기 friend ostream& operator << (ostream& os,const Account& acc); }; void Account::deposit(double _balance) { if(_balance>0 ) { balance += _balance ; cout << *this; } } void Account::withdraw(double _balance) { if(_balance > 0 && (balance - _balance >=0)) { balance -= _balance ; cout << *this; //*this ->Account 자신 } } ostream& operator << (ostream& os,const Account& acc) { os << "고객 " << acc.id << "님의 저축액은 " << acc.balance << "원 입니다." << endl; return os; } int main() { Account acc(10000123); acc.deposit(2000); //+2000 acc.deposit(2000); //+2000 acc.withdraw(6000);//찾기 실패 -> 출력 안됨 acc.withdraw(2000);//-2000 Account acc2(20000125, 1000); acc2.deposit(3000); //+3000 acc2.deposit(2000); //+2000 return 0; }
/* >> Account클래스를 아래와 같이 수정하시오. (1) 현재 날짜 및 시간을 출력하는 dates함수를 작성하시오. - dates함수는 통장개설시 ' ', 입금시 '+', 출금시 '-'와 같은 캐릭터를 입력으로 받아 날짜를 출력하기 전에 먼저 출력하도록 한다. - dates함수는 클래스 내부에서만 사용되도록 하시오. ** 현재 시간 구하기 ** #include#include using namespace std; int main() { time_t now=time(NULL); //시간을 구하기 위한 초기화 tm t; localtime_s(&t, &now); //현재 시간 구하기 cout << "년 : " << t.tm_year+1900 << endl; cout << "월 : " << t.tm_mon+1 << endl; cout << "일 : " << t.tm_mday << endl; cout << "시 : " << t.tm_hour << endl; cout << "분 : " << t.tm_min << endl; cout << "초 : " << t.tm_sec << endl; return 0; } */ #include #include using namespace std; class Account { private: int id; double balance; void dates(char c);//[년/월/일 시간:분:초] public : Account(int _id, double _balance=0.0) : id(_id), balance(_balance) { dates(' '); //저금한 시간 cout << *this; } ~Account(){} int getId()const{return id;} double getBalance()const{return balance;} void deposit(double _balance); //저금하기 void withdraw(double _balance); //돈 찾기 friend ostream& operator << (ostream& os,const Account& acc); }; void Account::dates(char c) //[년/월/일 시간:분:초] { time_t now=time(NULL); //시간을 구하기 위한 초기화 tm t; localtime_s(&t, &now); //현재 시간 구하기 cout << c << "[" << (t.tm_year+1900) << "/" << (t.tm_mon+1) << "/" << (t.tm_mday) << "/ " << (t.tm_hour) << ":" << (t.tm_min) << ":" << (t.tm_sec) << "]"; } void Account::deposit(double _balance) { if(_balance > 0 ) { balance += _balance; dates('+'); //저금한 시간 cout << *this; } } void Account::withdraw(double _balance) { if(_balance > 0 && (balance - _balance >=0)) { balance -= _balance; dates('-'); //저금한 시간 cout << *this; //*this ->Account 자신 } } ostream& operator << (ostream& os,const Account& acc) { os << "고객 " << acc.id << "님의 저축액은 " << acc.balance << "원 입니다." << endl; return os; } int main() { Account acc(10000123); acc.deposit(2000); //+2000 acc.deposit(2000); //+2000 acc.withdraw(6000); //찾기 실패 -> 출력 안됨 acc.withdraw(2000);//-2000 Account acc2(20000125, 1000); acc2.deposit(3000); //+3000 acc2.deposit(2000); //+2000 return 0; }
/* >> Account클래스를 아래와 같이 수정하시오. (1) +=연산자를 이용하여 입금할 수 있도록 연산자오버로딩을 하시오. (2) -=연산자를 이용하여 출금할 수 있도록 연산자오버로딩을 하시오. (3) +=과 -=연산자를 이용하여 입출금 시, 기존의 deposit과 withdraw함수와 동일한 규칙을 가지되, 입출금에 실패할 경우 '?'머리말과 함께 실패 메시지를 화면에 출력하시오. (4) 고객의 아이디가 서로 같은지를 비교하는 ==와 !=연산자를 오버로딩하시오. */ #include#include using namespace std; class Account { private: int id; double balance; void dates(char c);//[년/월/일 시간:분:초] public : Account(int _id, double _balance=0.0) : id(_id), balance(_balance) { dates(' '); //저금한 시간 cout << *this; } ~Account(){} int getId()const{return id;} double getBalance()const{return balance;} bool deposit(double _balance); //저금하기 bool withdraw(double _balance); //돈 찾기 friend ostream& operator << (ostream& os,const Account& acc); Account& operator +=(double _balance); Account& operator -=(double _balance); bool operator ==(const Account& acc); bool operator !=(const Account& acc); }; Account& Account::operator +=(double _balance) { if(deposit(_balance) == false ) { dates('?'); //입금실패 cout << "입금에 실패했습니다." << endl; } return *this; } Account& Account::operator -=(double _balance) { if(withdraw(_balance) == false) { dates('?'); //출금실패 cout << "출금에 실패했습니다." << endl; } return *this; } bool Account::operator ==(const Account& acc) { return (id==acc.getId()); } bool Account::operator !=(const Account& acc) { return (id!=acc.getId()); } void Account::dates(char c) //[년/월/일 시간:분:초] { time_t now=time(NULL); //시간을 구하기 위한 초기화 tm t; localtime_s(&t, &now); //현재 시간 구하기 cout << c << "[" << (t.tm_year+1900) << "/" << (t.tm_mon+1) << "/" << (t.tm_mday) << "/ " << (t.tm_hour) << ":" << (t.tm_min) << ":" << (t.tm_sec) << "]"; } bool Account::deposit(double _balance) { if(_balance > 0 ) { balance += _balance; dates('+'); //저금한 시간 cout << *this; return true; } return false; } bool Account::withdraw(double _balance) { if(_balance > 0 && (balance - _balance >=0)) { balance -= _balance; dates('-'); //저금한 시간 cout << *this; //*this ->Account 자신 return true; } return false; } ostream& operator << (ostream& os,const Account& acc) { os << "고객 " << acc.id << "님의 저축액은 " << acc.balance << "원 입니다." << endl; return os; } int main() { Account acc(10000123); acc+=2000; acc+=2000; acc-=6000; // 출금 실패 acc-=2000; Account *acc2=new Account(20000125, 1000); Account *acc3=new Account(20000127, 2000); *acc2+=5000; *acc2-=2000; *acc2+=-2000; // 입금 실패 acc3->deposit(500); acc3->deposit(1000); //같은 고객인가? cout << (acc==*acc2) << endl; //false cout << (acc!=*acc2) << endl; //true delete acc2; //소멸 delete acc3; //소멸 return 0; }