Protected members are hidden from callers but available inside derived classes.

protected A `protected` member can be used by the class itself and by classes derived from it.

Protected Members

example
protected_members.cpp
Replay: real traced execution (multi-file project)
#include <iostream>

class Account {
protected:
    int balance;

public:
    Account(int startingBalance) {
        balance = startingBalance;
    }

    int getBalance() {
        return balance;
    }
};

class SavingsAccount : public Account {
public:
    SavingsAccount(int startingBalance) : Account(startingBalance) {
    }

    void addInterest(int interest) {
        balance += interest;
    }
};

int main() {
    int startingBalance = 100;
    int interest = 5;

    SavingsAccount account(startingBalance);
    account.addInterest(interest);

    std::cout << "interest=" << interest << std::endl;
    std::cout << "balance=" << account.getBalance() << std::endl;
    return 0;
}
#include <iostream>

class Account {
protected:
    int balance;

public:
    Account(int startingBalance) {
        balance = startingBalance;
    }

    int getBalance() {
        return balance;
    }
};

class SavingsAccount : public Account {
public:
    SavingsAccount(int startingBalance) : Account(startingBalance) {
    }

    void addInterest(int interest) {
        balance += interest;
    }
};

int main() {
    int startingBalance = 50;
    int interest = 5;

    SavingsAccount account(startingBalance);
    account.addInterest(interest);

    std::cout << "interest=" << interest << std::endl;
    std::cout << "balance=" << account.getBalance() << std::endl;
    return 0;
}
#include <iostream>

class Account {
protected:
    int balance;

public:
    Account(int startingBalance) {
        balance = startingBalance;
    }

    int getBalance() {
        return balance;
    }
};

class SavingsAccount : public Account {
public:
    SavingsAccount(int startingBalance) : Account(startingBalance) {
    }

    void addInterest(int interest) {
        balance += interest;
    }
};

int main() {
    int startingBalance = 200;
    int interest = 5;

    SavingsAccount account(startingBalance);
    account.addInterest(interest);

    std::cout << "interest=" << interest << std::endl;
    std::cout << "balance=" << account.getBalance() << std::endl;
    return 0;
}
#include <iostream>

class Account {
protected:
    int balance;

public:
    Account(int startingBalance) {
        balance = startingBalance;
    }

    int getBalance() {
        return balance;
    }
};

class SavingsAccount : public Account {
public:
    SavingsAccount(int startingBalance) : Account(startingBalance) {
    }

    void addInterest(int interest) {
        balance += interest;
    }
};

int main() {
    int startingBalance = 100;
    int interest = 10;

    SavingsAccount account(startingBalance);
    account.addInterest(interest);

    std::cout << "interest=" << interest << std::endl;
    std::cout << "balance=" << account.getBalance() << std::endl;
    return 0;
}
#include <iostream>

class Account {
protected:
    int balance;

public:
    Account(int startingBalance) {
        balance = startingBalance;
    }

    int getBalance() {
        return balance;
    }
};

class SavingsAccount : public Account {
public:
    SavingsAccount(int startingBalance) : Account(startingBalance) {
    }

    void addInterest(int interest) {
        balance += interest;
    }
};

int main() {
    int startingBalance = 100;
    int interest = 25;

    SavingsAccount account(startingBalance);
    account.addInterest(interest);

    std::cout << "interest=" << interest << std::endl;
    std::cout << "balance=" << account.getBalance() << std::endl;
    return 0;
}
  1. startingBalance ← 100, interest ← 5

    27int main() {28    int startingBalance→ 100 = 100; //@startingBalance=50, 20029    int interest→ 5 = 5; //@interest=10, 253031    SavingsAccount account(startingBalance100);32    account.addInterest(interest);
  2. balance ← 100

    7public:8    Account(int startingBalance100) {9        balance→ 100 = startingBalance100;10    }
  3. SavingsAccount(int startingBalance) : Account(startingBalance)

    18public:19    SavingsAccount(int startingBalance100) : Account(startingBalance) {20    }
  4. account ← (empty)

    31SavingsAccount account→ (empty)(startingBalance100);32account(empty).addInterest(interest5);
  5. balance ← 105

    22void addInterest(int interest5) {23    balance→ 105 += interest5;24}
  6. account.addInterest(interest);

    31SavingsAccount account(startingBalance);32account(empty).addInterest(interest5);3334std::cout << "interest=" << interest5 << std::endl;35std::cout << "balance=" << account(empty).getBalance() << std::endl;36return 0;
    outputinterest=5
  7. int getBalance()

    12int getBalance() {13    return balance105;14}
  8. std::cout << "balance=" << account.getBalance() << std::endl;

    34    std::cout << "interest=" << interest << std::endl;35    std::cout << "balance=" << account(empty).getBalance() << std::endl;36    return 0;37}
    outputbalance=105
  1. startingBalance ← 50, interest ← 5

    27int main() {28    int startingBalance→ 50 = 50;29    int interest→ 5 = 5;3031    SavingsAccount account(startingBalance50);32    account.addInterest(interest);
  2. balance ← 50

    7public:8    Account(int startingBalance50) {9        balance→ 50 = startingBalance50;10    }
  3. SavingsAccount(int startingBalance) : Account(startingBalance)

    18public:19    SavingsAccount(int startingBalance50) : Account(startingBalance) {20    }
  4. account ← (empty)

    31SavingsAccount account→ (empty)(startingBalance50);32account(empty).addInterest(interest5);
  5. balance ← 55

    22void addInterest(int interest5) {23    balance→ 55 += interest5;24}
  6. account.addInterest(interest);

    31SavingsAccount account(startingBalance);32account(empty).addInterest(interest5);3334std::cout << "interest=" << interest5 << std::endl;35std::cout << "balance=" << account(empty).getBalance() << std::endl;36return 0;
    outputinterest=5
  7. int getBalance()

    12int getBalance() {13    return balance55;14}
  8. std::cout << "balance=" << account.getBalance() << std::endl;

    34    std::cout << "interest=" << interest << std::endl;35    std::cout << "balance=" << account(empty).getBalance() << std::endl;36    return 0;37}
    outputbalance=55
  1. startingBalance ← 200, interest ← 5

    27int main() {28    int startingBalance→ 200 = 200;29    int interest→ 5 = 5;3031    SavingsAccount account(startingBalance200);32    account.addInterest(interest);
  2. balance ← 200

    7public:8    Account(int startingBalance200) {9        balance→ 200 = startingBalance200;10    }
  3. SavingsAccount(int startingBalance) : Account(startingBalance)

    18public:19    SavingsAccount(int startingBalance200) : Account(startingBalance) {20    }
  4. account ← (empty)

    31SavingsAccount account→ (empty)(startingBalance200);32account(empty).addInterest(interest5);
  5. balance ← 205

    22void addInterest(int interest5) {23    balance→ 205 += interest5;24}
  6. account.addInterest(interest);

    31SavingsAccount account(startingBalance);32account(empty).addInterest(interest5);3334std::cout << "interest=" << interest5 << std::endl;35std::cout << "balance=" << account(empty).getBalance() << std::endl;36return 0;
    outputinterest=5
  7. int getBalance()

    12int getBalance() {13    return balance205;14}
  8. std::cout << "balance=" << account.getBalance() << std::endl;

    34    std::cout << "interest=" << interest << std::endl;35    std::cout << "balance=" << account(empty).getBalance() << std::endl;36    return 0;37}
    outputbalance=205
  1. startingBalance ← 100, interest ← 10

    27int main() {28    int startingBalance→ 100 = 100;29    int interest→ 10 = 10;3031    SavingsAccount account(startingBalance100);32    account.addInterest(interest);
  2. balance ← 100

    7public:8    Account(int startingBalance100) {9        balance→ 100 = startingBalance100;10    }
  3. SavingsAccount(int startingBalance) : Account(startingBalance)

    18public:19    SavingsAccount(int startingBalance100) : Account(startingBalance) {20    }
  4. account ← (empty)

    31SavingsAccount account→ (empty)(startingBalance100);32account(empty).addInterest(interest10);
  5. balance ← 110

    22void addInterest(int interest10) {23    balance→ 110 += interest10;24}
  6. account.addInterest(interest);

    31SavingsAccount account(startingBalance);32account(empty).addInterest(interest10);3334std::cout << "interest=" << interest10 << std::endl;35std::cout << "balance=" << account(empty).getBalance() << std::endl;36return 0;
    outputinterest=10
  7. int getBalance()

    12int getBalance() {13    return balance110;14}
  8. std::cout << "balance=" << account.getBalance() << std::endl;

    34    std::cout << "interest=" << interest << std::endl;35    std::cout << "balance=" << account(empty).getBalance() << std::endl;36    return 0;37}
    outputbalance=110
  1. startingBalance ← 100, interest ← 25

    27int main() {28    int startingBalance→ 100 = 100;29    int interest→ 25 = 25;3031    SavingsAccount account(startingBalance100);32    account.addInterest(interest);
  2. balance ← 100

    7public:8    Account(int startingBalance100) {9        balance→ 100 = startingBalance100;10    }
  3. SavingsAccount(int startingBalance) : Account(startingBalance)

    18public:19    SavingsAccount(int startingBalance100) : Account(startingBalance) {20    }
  4. account ← (empty)

    31SavingsAccount account→ (empty)(startingBalance100);32account(empty).addInterest(interest25);
  5. balance ← 125

    22void addInterest(int interest25) {23    balance→ 125 += interest25;24}
  6. account.addInterest(interest);

    31SavingsAccount account(startingBalance);32account(empty).addInterest(interest25);3334std::cout << "interest=" << interest25 << std::endl;35std::cout << "balance=" << account(empty).getBalance() << std::endl;36return 0;
    outputinterest=25
  7. int getBalance()

    12int getBalance() {13    return balance125;14}
  8. std::cout << "balance=" << account.getBalance() << std::endl;

    34    std::cout << "interest=" << interest << std::endl;35    std::cout << "balance=" << account(empty).getBalance() << std::endl;36    return 0;37}
    outputbalance=125