Inheritance
Protected Members
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
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;
}
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);balance ← 100
7public:8 Account(int startingBalance100) {9 balance→ 100 = startingBalance100;10 }SavingsAccount(int startingBalance) : Account(startingBalance)
18public:19 SavingsAccount(int startingBalance100) : Account(startingBalance) {20 }account ← (empty)
31SavingsAccount account→ (empty)(startingBalance100);32account(empty).addInterest(interest5);balance ← 105
22void addInterest(int interest5) {23 balance→ 105 += interest5;24}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=5int getBalance()
12int getBalance() {13 return balance105;14}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
startingBalance ← 50, interest ← 5
27int main() {28 int startingBalance→ 50 = 50;29 int interest→ 5 = 5;3031 SavingsAccount account(startingBalance50);32 account.addInterest(interest);balance ← 50
7public:8 Account(int startingBalance50) {9 balance→ 50 = startingBalance50;10 }SavingsAccount(int startingBalance) : Account(startingBalance)
18public:19 SavingsAccount(int startingBalance50) : Account(startingBalance) {20 }account ← (empty)
31SavingsAccount account→ (empty)(startingBalance50);32account(empty).addInterest(interest5);balance ← 55
22void addInterest(int interest5) {23 balance→ 55 += interest5;24}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=5int getBalance()
12int getBalance() {13 return balance55;14}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
startingBalance ← 200, interest ← 5
27int main() {28 int startingBalance→ 200 = 200;29 int interest→ 5 = 5;3031 SavingsAccount account(startingBalance200);32 account.addInterest(interest);balance ← 200
7public:8 Account(int startingBalance200) {9 balance→ 200 = startingBalance200;10 }SavingsAccount(int startingBalance) : Account(startingBalance)
18public:19 SavingsAccount(int startingBalance200) : Account(startingBalance) {20 }account ← (empty)
31SavingsAccount account→ (empty)(startingBalance200);32account(empty).addInterest(interest5);balance ← 205
22void addInterest(int interest5) {23 balance→ 205 += interest5;24}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=5int getBalance()
12int getBalance() {13 return balance205;14}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
startingBalance ← 100, interest ← 10
27int main() {28 int startingBalance→ 100 = 100;29 int interest→ 10 = 10;3031 SavingsAccount account(startingBalance100);32 account.addInterest(interest);balance ← 100
7public:8 Account(int startingBalance100) {9 balance→ 100 = startingBalance100;10 }SavingsAccount(int startingBalance) : Account(startingBalance)
18public:19 SavingsAccount(int startingBalance100) : Account(startingBalance) {20 }account ← (empty)
31SavingsAccount account→ (empty)(startingBalance100);32account(empty).addInterest(interest10);balance ← 110
22void addInterest(int interest10) {23 balance→ 110 += interest10;24}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=10int getBalance()
12int getBalance() {13 return balance110;14}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
startingBalance ← 100, interest ← 25
27int main() {28 int startingBalance→ 100 = 100;29 int interest→ 25 = 25;3031 SavingsAccount account(startingBalance100);32 account.addInterest(interest);balance ← 100
7public:8 Account(int startingBalance100) {9 balance→ 100 = startingBalance100;10 }SavingsAccount(int startingBalance) : Account(startingBalance)
18public:19 SavingsAccount(int startingBalance100) : Account(startingBalance) {20 }account ← (empty)
31SavingsAccount account→ (empty)(startingBalance100);32account(empty).addInterest(interest25);balance ← 125
22void addInterest(int interest25) {23 balance→ 125 += interest25;24}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=25int getBalance()
12int getBalance() {13 return balance125;14}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