Build a BankAccount class that keeps its balance private and lets other code change it only through methods that check the rules. This is encapsulation: the object protects its own data.
Private balance. Put the double balance member in a private: section and the methods in a public: section, so only the class can touch the balance.
What the class must have (C++):
BankAccount(double initialBalance): creates an account that starts with the given balance.void deposit(double amount): addsamountto the balance. Ifamountis zero or negative, do nothing (no error, the balance stays the same).bool withdraw(double amount): ifamountis zero or negative, or larger than the balance, change nothing and returnfalse. Otherwise subtract it from the balance and returntrue. Withdrawing exactly the whole balance is allowed (the balance becomes 0).double getBalance(): returns the current balance. It is the only way for outside code to read it.
cout prints the double 120 as 120, so no cast is needed.
The driver. The driver at the end of the starter code is already written and uses your class. It runs these checks:
class Solution {
public:
void mainFunction() {
BankAccount account(100);
account.deposit(50);
account.withdraw(30);
account.withdraw(200);
cout << "Balance: " << account.getBalance() << endl;
account.deposit(-20);
account.deposit(0);
account.withdraw(-5);
cout << "Balance: " << account.getBalance() << endl;
if (account.withdraw(120)) {
cout << "Withdrew all" << endl;
}
cout << "Balance: " << account.getBalance() << endl;
if (!account.withdraw(1)) {
cout << "Rejected" << endl;
}
}
};
Walk through it: start with 100, deposit 50 (150), withdraw 30 (120), withdraw 200 is refused (still 120). Then deposit -20, deposit 0 and withdraw -5 are all ignored (still 120). Withdrawing 120 succeeds and empties the account, so the balance is 0, and withdrawing 1 more is refused.
Expected output:
Balance: 120
Balance: 120
Withdrew all
Balance: 0
Rejected
Both
deposit and withdraw start with a guard that rejects amount <= 0. Write the guard first, then the change to the balance.
double balance; under private:, and in the constructor balance = initialBalance;. Remember the semicolon after the closing brace of the class.
if (amount <= 0 || amount > balance) return false;, then balance -= amount; and return true;.
class BankAccount {
private:
double balance;
public:
BankAccount(double initialBalance) {
balance = initialBalance;
}
void deposit(double amount) {
if (amount <= 0) return;
balance += amount;
}
bool withdraw(double amount) {
if (amount <= 0 || amount > balance) return false;
balance -= amount;
return true;
}
double getBalance() {
return balance;
}
};
class Solution {
public:
void mainFunction() {
BankAccount account(100);
account.deposit(50);
account.withdraw(30);
account.withdraw(200);
cout << "Balance: " << account.getBalance() << endl;
account.deposit(-20);
account.deposit(0);
account.withdraw(-5);
cout << "Balance: " << account.getBalance() << endl;
if (account.withdraw(120)) {
cout << "Withdrew all" << endl;
}
cout << "Balance: " << account.getBalance() << endl;
if (!account.withdraw(1)) {
cout << "Rejected" << endl;
}
}
};
Free plan: 30 tutor messages. Premium is unlimited.
