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

example
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;
}
  1. 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);
  2. cents ← 500

    7public:8    BankAccount(int startingCents500) {9        cents→ 500 = startingCents500;10    }
  3. account ← (empty)

    25BankAccount account→ (empty)(startingCents500);26account(empty).deposit(depositCents150);
  4. cents ← 650

    12void deposit(int amount150) {13    cents→ 650 += amount150;14}
  5. 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=150
  6. int balance()

    16int balance() {17    return cents650;18}
  7. 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
  1. startingCents ← 200, depositCents ← 150

    21int main() {22    int startingCents→ 200 = 200;23    int depositCents→ 150 = 150;2425    BankAccount account(startingCents200);26    account.deposit(depositCents);
  2. cents ← 200

    7public:8    BankAccount(int startingCents200) {9        cents→ 200 = startingCents200;10    }
  3. account ← (empty)

    25BankAccount account→ (empty)(startingCents200);26account(empty).deposit(depositCents150);
  4. cents ← 350

    12void deposit(int amount150) {13    cents→ 350 += amount150;14}
  5. 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=150
  6. int balance()

    16int balance() {17    return cents350;18}
  7. 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
  1. startingCents ← 900, depositCents ← 150

    21int main() {22    int startingCents→ 900 = 900;23    int depositCents→ 150 = 150;2425    BankAccount account(startingCents900);26    account.deposit(depositCents);
  2. cents ← 900

    7public:8    BankAccount(int startingCents900) {9        cents→ 900 = startingCents900;10    }
  3. account ← (empty)

    25BankAccount account→ (empty)(startingCents900);26account(empty).deposit(depositCents150);
  4. cents ← 1050

    12void deposit(int amount150) {13    cents→ 1050 += amount150;14}
  5. 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=150
  6. int balance()

    16int balance() {17    return cents1050;18}
  7. 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
  1. startingCents ← 500, depositCents ← 50

    21int main() {22    int startingCents→ 500 = 500;23    int depositCents→ 50 = 50;2425    BankAccount account(startingCents500);26    account.deposit(depositCents);
  2. cents ← 500

    7public:8    BankAccount(int startingCents500) {9        cents→ 500 = startingCents500;10    }
  3. account ← (empty)

    25BankAccount account→ (empty)(startingCents500);26account(empty).deposit(depositCents50);
  4. cents ← 550

    12void deposit(int amount50) {13    cents→ 550 += amount50;14}
  5. 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=50
  6. int balance()

    16int balance() {17    return cents550;18}
  7. 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
  1. startingCents ← 500, depositCents ← 300

    21int main() {22    int startingCents→ 500 = 500;23    int depositCents→ 300 = 300;2425    BankAccount account(startingCents500);26    account.deposit(depositCents);
  2. cents ← 500

    7public:8    BankAccount(int startingCents500) {9        cents→ 500 = startingCents500;10    }
  3. account ← (empty)

    25BankAccount account→ (empty)(startingCents500);26account(empty).deposit(depositCents300);
  4. cents ← 800

    12void deposit(int amount300) {13    cents→ 800 += amount300;14}
  5. 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=300
  6. int balance()

    16int balance() {17    return cents800;18}
  7. 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