Classes
Access Control
Access labels such as public and private choose which parts of a class callers can use directly.
private
Private fields can be changed only by code inside the class.
Access Control
access_control.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
class BankAccount {
private:
int cents;
public:
BankAccount(int startingCents) {
cents = startingCents;
}
void deposit(int amount) {
cents += amount;
}
int balance() {
return cents;
}
};
int main() {
int startingCents = 500;
int depositCents = 150;
BankAccount account(startingCents);
account.deposit(depositCents);
std::cout << "deposit=" << depositCents << std::endl;
std::cout << "balance=" << account.balance() << std::endl;
return 0;
}
#include <iostream>
class BankAccount {
private:
int cents;
public:
BankAccount(int startingCents) {
cents = startingCents;
}
void deposit(int amount) {
cents += amount;
}
int balance() {
return cents;
}
};
int main() {
int startingCents = 200;
int depositCents = 150;
BankAccount account(startingCents);
account.deposit(depositCents);
std::cout << "deposit=" << depositCents << std::endl;
std::cout << "balance=" << account.balance() << std::endl;
return 0;
}
#include <iostream>
class BankAccount {
private:
int cents;
public:
BankAccount(int startingCents) {
cents = startingCents;
}
void deposit(int amount) {
cents += amount;
}
int balance() {
return cents;
}
};
int main() {
int startingCents = 900;
int depositCents = 150;
BankAccount account(startingCents);
account.deposit(depositCents);
std::cout << "deposit=" << depositCents << std::endl;
std::cout << "balance=" << account.balance() << std::endl;
return 0;
}
#include <iostream>
class BankAccount {
private:
int cents;
public:
BankAccount(int startingCents) {
cents = startingCents;
}
void deposit(int amount) {
cents += amount;
}
int balance() {
return cents;
}
};
int main() {
int startingCents = 500;
int depositCents = 50;
BankAccount account(startingCents);
account.deposit(depositCents);
std::cout << "deposit=" << depositCents << std::endl;
std::cout << "balance=" << account.balance() << std::endl;
return 0;
}
#include <iostream>
class BankAccount {
private:
int cents;
public:
BankAccount(int startingCents) {
cents = startingCents;
}
void deposit(int amount) {
cents += amount;
}
int balance() {
return cents;
}
};
int main() {
int startingCents = 500;
int depositCents = 300;
BankAccount account(startingCents);
account.deposit(depositCents);
std::cout << "deposit=" << depositCents << std::endl;
std::cout << "balance=" << account.balance() << std::endl;
return 0;
}
startingCents ← 500, depositCents ← 150
21int main() {22 int startingCents→ 500 = 500; //@startingCents=200, 90023 int depositCents→ 150 = 150; //@depositCents=50, 3002425 BankAccount account(startingCents500);26 account.deposit(depositCents);cents ← 500
7public:8 BankAccount(int startingCents500) {9 cents→ 500 = startingCents500;10 }account ← (empty)
25BankAccount account→ (empty)(startingCents500);26account(empty).deposit(depositCents150);cents ← 650
12void deposit(int amount150) {13 cents→ 650 += amount150;14}account.deposit(depositCents);
25BankAccount account(startingCents);26account(empty).deposit(depositCents150);2728std::cout << "deposit=" << depositCents150 << std::endl;29std::cout << "balance=" << account(empty).balance() << std::endl;30return 0;outputdeposit=150int balance()
16int balance() {17 return cents650;18}std::cout << "balance=" << account.balance() << std::endl;
28 std::cout << "deposit=" << depositCents << std::endl;29 std::cout << "balance=" << account(empty).balance() << std::endl;30 return 0;31}outputbalance=650
startingCents ← 200, depositCents ← 150
21int main() {22 int startingCents→ 200 = 200;23 int depositCents→ 150 = 150;2425 BankAccount account(startingCents200);26 account.deposit(depositCents);cents ← 200
7public:8 BankAccount(int startingCents200) {9 cents→ 200 = startingCents200;10 }account ← (empty)
25BankAccount account→ (empty)(startingCents200);26account(empty).deposit(depositCents150);cents ← 350
12void deposit(int amount150) {13 cents→ 350 += amount150;14}account.deposit(depositCents);
25BankAccount account(startingCents);26account(empty).deposit(depositCents150);2728std::cout << "deposit=" << depositCents150 << std::endl;29std::cout << "balance=" << account(empty).balance() << std::endl;30return 0;outputdeposit=150int balance()
16int balance() {17 return cents350;18}std::cout << "balance=" << account.balance() << std::endl;
28 std::cout << "deposit=" << depositCents << std::endl;29 std::cout << "balance=" << account(empty).balance() << std::endl;30 return 0;31}outputbalance=350
startingCents ← 900, depositCents ← 150
21int main() {22 int startingCents→ 900 = 900;23 int depositCents→ 150 = 150;2425 BankAccount account(startingCents900);26 account.deposit(depositCents);cents ← 900
7public:8 BankAccount(int startingCents900) {9 cents→ 900 = startingCents900;10 }account ← (empty)
25BankAccount account→ (empty)(startingCents900);26account(empty).deposit(depositCents150);cents ← 1050
12void deposit(int amount150) {13 cents→ 1050 += amount150;14}account.deposit(depositCents);
25BankAccount account(startingCents);26account(empty).deposit(depositCents150);2728std::cout << "deposit=" << depositCents150 << std::endl;29std::cout << "balance=" << account(empty).balance() << std::endl;30return 0;outputdeposit=150int balance()
16int balance() {17 return cents1050;18}std::cout << "balance=" << account.balance() << std::endl;
28 std::cout << "deposit=" << depositCents << std::endl;29 std::cout << "balance=" << account(empty).balance() << std::endl;30 return 0;31}outputbalance=1050
startingCents ← 500, depositCents ← 50
21int main() {22 int startingCents→ 500 = 500;23 int depositCents→ 50 = 50;2425 BankAccount account(startingCents500);26 account.deposit(depositCents);cents ← 500
7public:8 BankAccount(int startingCents500) {9 cents→ 500 = startingCents500;10 }account ← (empty)
25BankAccount account→ (empty)(startingCents500);26account(empty).deposit(depositCents50);cents ← 550
12void deposit(int amount50) {13 cents→ 550 += amount50;14}account.deposit(depositCents);
25BankAccount account(startingCents);26account(empty).deposit(depositCents50);2728std::cout << "deposit=" << depositCents50 << std::endl;29std::cout << "balance=" << account(empty).balance() << std::endl;30return 0;outputdeposit=50int balance()
16int balance() {17 return cents550;18}std::cout << "balance=" << account.balance() << std::endl;
28 std::cout << "deposit=" << depositCents << std::endl;29 std::cout << "balance=" << account(empty).balance() << std::endl;30 return 0;31}outputbalance=550
startingCents ← 500, depositCents ← 300
21int main() {22 int startingCents→ 500 = 500;23 int depositCents→ 300 = 300;2425 BankAccount account(startingCents500);26 account.deposit(depositCents);cents ← 500
7public:8 BankAccount(int startingCents500) {9 cents→ 500 = startingCents500;10 }account ← (empty)
25BankAccount account→ (empty)(startingCents500);26account(empty).deposit(depositCents300);cents ← 800
12void deposit(int amount300) {13 cents→ 800 += amount300;14}account.deposit(depositCents);
25BankAccount account(startingCents);26account(empty).deposit(depositCents300);2728std::cout << "deposit=" << depositCents300 << std::endl;29std::cout << "balance=" << account(empty).balance() << std::endl;30return 0;outputdeposit=300int balance()
16int balance() {17 return cents800;18}std::cout << "balance=" << account.balance() << std::endl;
28 std::cout << "deposit=" << depositCents << std::endl;29 std::cout << "balance=" << account(empty).balance() << std::endl;30 return 0;31}outputbalance=800