요약 - 은행 계좌 관리자
Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 104개 중 33번째.
챌린지
쉬움이 장에서 배운 모든 클래스 속성 개념, 즉 getter와 setter를 사용하는 private 멤버, const 멤버 함수, mutable 멤버, static 변수와 메서드, friend 함수를 모두 활용하는 완전한 은행 계좌 관리자를 만들어 봅시다.
코드를 정리하기 위해 두 개의 파일을 만듭니다.
BankAccount.h: 적절한 캡슐화를 통해 계좌 데이터를 관리하는BankAccount클래스를 정의합니다. 클래스에는 다음이 포함되어야 합니다.- private 멤버:
accountNumber(string),ownerName(string),balance(double), 그리고 잔액을 확인한 횟수를 추적하는mutable int queryCount - 존재하는 계좌의 수를 추적하는 private static 멤버
totalAccounts - 계좌 번호, 소유자 이름, 초기 잔액을 받는 생성자.
queryCount를0으로 초기화하고totalAccounts를 증가시켜야 합니다. - const getter:
getAccountNumber(),getOwnerName(),getBalance(). 잔액 getter는 호출될 때마다queryCount를 증가시켜야 합니다. - 잔액을 확인한 횟수를 반환하는 const getter
getQueryCount() - 양수인 경우에만 잔액에 금액을 더하는
deposit(double amount)메서드 - 금액이 양수이고 현재 잔액을 초과하지 않는 경우에만 잔액에서 금액을 빼는
withdraw(double amount)메서드 - 생성된 총 계좌 수를 반환하는 static 메서드
getTotalAccounts() - 계좌 간에 돈을 이체하는 friend 함수
transfer(BankAccount& from, BankAccount& to, double amount)를 선언합니다. 금액이 양수이고 출금 계좌에 충분한 잔액이 있는 경우에만 이체해야 합니다.
클래스 정의 다음에 static 멤버와 friend 함수를 정의합니다.
- private 멤버:
main.cpp: 이러한 기능이 모두 함께 작동하는 모습을 보여 줍니다. 입력에서 소유자 이름 두 개와 초기 잔액 두 개를 읽은 다음(총 네 줄: name1, balance1, name2, balance2), 다음을 수행합니다.- 계좌 번호가
"ACC001"과"ACC002"인BankAccount객체 두 개를 만듭니다. "Total accounts: <count>"를 출력합니다.- 첫 번째 계좌에 대해
"<name>: $<balance>"를 출력합니다. - 두 번째 계좌에 대해
"<name>: $<balance>"를 출력합니다. - 첫 번째 계좌에
500.0을 입금합니다. - 첫 번째 계좌에 대해
"After deposit - <name>: $<balance>"를 출력합니다. - friend 함수를 사용해 첫 번째 계좌에서 두 번째 계좌로
300.0을 이체합니다. "After transfer:"를 출력합니다.- 첫 번째 계좌에 대해
" <name>: $<balance>"를 출력합니다. - 두 번째 계좌에 대해
" <name>: $<balance>"를 출력합니다. - 첫 번째 계좌에 대해
"Query count for <name>: <count>"를 출력합니다.
- 계좌 번호가
<iomanip>의 std::fixed와 std::setprecision(2)를 사용해 모든 잔액을 소수점 둘째 자리까지 표시합니다. std::stod()를 사용해 잔액 입력을 문자열에서 double로 변환합니다.
헤더 파일에 헤더 가드를 넣고 필요한 곳에 <string>과 <iostream>을 포함하는 것도 잊지 마세요.
직접 해보기
#include <iostream>
#include <string>
#include <iomanip>
#include "BankAccount.h"
int main() {
// 입력 읽기
std::string name1, name2;
std::string balance1Str, balance2Str;
std::getline(std::cin, name1);
std::getline(std::cin, balance1Str);
std::getline(std::cin, name2);
std::getline(std::cin, balance2Str);
double balance1 = std::stod(balance1Str);
double balance2 = std::stod(balance2Str);
// 출력 형식을 소수점 이하 2자리로 설정하기
std::cout << std::fixed << std::setprecision(2);
// TODO: 계좌 번호가 "ACC001"과 "ACC002"인 BankAccount 객체 두 개 생성하기
// TODO: "Total accounts: <count>" 출력하기
// TODO: 첫 번째 계좌에 대해 "<name>: $<balance>" 출력하기
// TODO: 두 번째 계좌에 대해 "<name>: $<balance>" 출력하기
// TODO: 첫 번째 계좌에 500.0 입금하기
// TODO: 첫 번째 계좌에 대해 "After deposit - <name>: $<balance>" 출력하기
// TODO: friend 함수를 사용해 첫 번째 계좌에서 두 번째 계좌로 300.0 이체하기
// TODO: "After transfer:" 출력하기
// TODO: 첫 번째 계좌에 대해 " <name>: $<balance>" 출력하기(2칸 들여쓰기 유의)
// TODO: 두 번째 계좌에 대해 " <name>: $<balance>" 출력하기(2칸 들여쓰기 유의)
// TODO: 첫 번째 계정에 대해 "Query count for <name>: <count>"를 출력하세요
return 0;
}
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러