PowerC++ 문제풀이, Chapter 9, Programming 8번
BankAccount.h
#pragma once
#include <iostream> // string 클래스를 사용하기 위함
using namespace std; // string 이름을 사용하기 위함
class BankAccount
{
private:
int accountNumber;
string ownwr;
int balance;
public:
void setBalance(int amount);
int gerBalance(); //잔액
void deposit(int amount); //예금
void withdraw(int amount); //출금
void print();
int transfer(int amount, BankAccount otherAccount);
};
BankAccount.cpp
#include "BankAccount.h"
void BankAccount::setBalance(int amount)
{
balance = amount;
}
int BankAccount::gerBalance()
{
return balance;
}
void BankAccount::deposit(int amount)
{
balance += amount;
}
void BankAccount::withdraw(int amount)
{
balance -= amount;
}
void BankAccount::print()
{
cout << "잔액은 " << balance << " 입니다." << endl;
// 출력할 때 ~~객체의 잔액은, 이런식으로 하고싶은데 멤버 함수 내에서 매개 변수를 받지 않고 어떻게 할 수 있을까?
}
int BankAccount::transfer(int amount, BankAccount otherAccount)
{
balance -= amount;
otherAccount.balance += amount;
return otherAccount.balance;
// 함수 내에서 매개변수로 썼던 객체의 balance를 바로 바꿀 수 있으면 좋을텐데 그렇게 하는 방법은 없을까?
// 프린터도 시도해봤는데 여러모로 더 어려워졌다.
// 문제에서 반환형에 int를 줬기 때문에 이런식으로 썼는데.. 뭔가 깔끔하지 않다.
}
BankAccountApp.cpp
#include "BankAccount.h"
int main()
{
BankAccount account;
BankAccount myAccount;
cout << "*** account ***" << endl;
account.setBalance(0);
account.deposit(100000);
account.print();
account.withdraw(8000);
account.print();
cout << endl << "*** myAccount ***" << endl;
myAccount.setBalance(0);
myAccount.deposit(100000);
myAccount.print();
myAccount.withdraw(8000);
myAccount.print();
// Programming 8번
cout << endl << "*** aacount에서 myAccount로 15000원 이체하기 ***" << endl;
myAccount.setBalance(account.transfer(15000, myAccount));
cout << endl << "*** aacount 잔액" << endl;
account.print();
cout << endl << "*** myAccount 잔액 ***" << endl;
myAccount.print();
return 0;
}
교재에 기존에 있던 코드에 tranfer함수만 추가했는데, main함수에서 transfer 함수를 호출하는 동작 이외에 부가적인 코드를 더 적어야 했어서 마음에 들지 않는다. tranfer라는 이름에 걸맞게 함수 내에서 완전히 데이터가 교환되면 좋을 것 같은데 어떻게 해야할지 모르겠다. 포인터를 이용하려고 했는데 실패했다.
팀원님 피드백 : 함수 선언시 레퍼런스로 선언하면 함수내에서 바로 바꾸기 가능하다고 스터디 팀원님이 피드백 해주셨다!! 사실 포인터로 해보려고 했을때도 1학기때 했던 포인터 부분을 처음부터 다시 보느라 (^^.. 방학이후 리셋된 내 지식..) 시간을 꽤 썼고, 결국 실패해서 레퍼런스 부분은 안봤는데 레퍼런스로 하는거였구나.. 조금 억울하면서도 너무 멋진 팀원들이 있는 스터디에 함께하고 있는것 같아서 기분 좋았다!!