Functions
References
References let a function work with the caller's original variable.
reference parameter
A reference parameter, written with `&`, can change the variable passed by the caller.
References
references.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
void addBonus(int& score, int bonus) {
score += bonus;
}
int main() {
int score = 40;
int bonus = 5;
addBonus(score, bonus);
std::cout << "bonus=" << bonus << std::endl;
std::cout << "score=" << score << std::endl;
return 0;
}
#include <iostream>
void addBonus(int& score, int bonus) {
score += bonus;
}
int main() {
int score = 25;
int bonus = 5;
addBonus(score, bonus);
std::cout << "bonus=" << bonus << std::endl;
std::cout << "score=" << score << std::endl;
return 0;
}
#include <iostream>
void addBonus(int& score, int bonus) {
score += bonus;
}
int main() {
int score = 60;
int bonus = 5;
addBonus(score, bonus);
std::cout << "bonus=" << bonus << std::endl;
std::cout << "score=" << score << std::endl;
return 0;
}
#include <iostream>
void addBonus(int& score, int bonus) {
score += bonus;
}
int main() {
int score = 40;
int bonus = 10;
addBonus(score, bonus);
std::cout << "bonus=" << bonus << std::endl;
std::cout << "score=" << score << std::endl;
return 0;
}
#include <iostream>
void addBonus(int& score, int bonus) {
score += bonus;
}
int main() {
int score = 40;
int bonus = 15;
addBonus(score, bonus);
std::cout << "bonus=" << bonus << std::endl;
std::cout << "score=" << score << std::endl;
return 0;
}
score ← 40, bonus ← 5
7int main() {8 int score→ 40 = 40; //@score=25, 609 int bonus→ 5 = 5; //@bonus=10, 151011 addBonus(score40, bonus5);score ← 45
3void addBonus(int& score40, int bonus5) {4 score→ 45 += bonus5;5}score ← 45
11 addBonus(score→ 45, bonus5);1213 std::cout << "bonus=" << bonus5 << std::endl;14 std::cout << "score=" << score45 << std::endl;15 return 0;16}outputbonus=5 score=45
score ← 25, bonus ← 5
7int main() {8 int score→ 25 = 25;9 int bonus→ 5 = 5;1011 addBonus(score25, bonus5);score ← 30
3void addBonus(int& score25, int bonus5) {4 score→ 30 += bonus5;5}score ← 30
11 addBonus(score→ 30, bonus5);1213 std::cout << "bonus=" << bonus5 << std::endl;14 std::cout << "score=" << score30 << std::endl;15 return 0;16}outputbonus=5 score=30
score ← 60, bonus ← 5
7int main() {8 int score→ 60 = 60;9 int bonus→ 5 = 5;1011 addBonus(score60, bonus5);score ← 65
3void addBonus(int& score60, int bonus5) {4 score→ 65 += bonus5;5}score ← 65
11 addBonus(score→ 65, bonus5);1213 std::cout << "bonus=" << bonus5 << std::endl;14 std::cout << "score=" << score65 << std::endl;15 return 0;16}outputbonus=5 score=65
score ← 40, bonus ← 10
7int main() {8 int score→ 40 = 40;9 int bonus→ 10 = 10;1011 addBonus(score40, bonus10);score ← 50
3void addBonus(int& score40, int bonus10) {4 score→ 50 += bonus10;5}score ← 50
11 addBonus(score→ 50, bonus10);1213 std::cout << "bonus=" << bonus10 << std::endl;14 std::cout << "score=" << score50 << std::endl;15 return 0;16}outputbonus=10 score=50
score ← 40, bonus ← 15
7int main() {8 int score→ 40 = 40;9 int bonus→ 15 = 15;1011 addBonus(score40, bonus15);score ← 55
3void addBonus(int& score40, int bonus15) {4 score→ 55 += bonus15;5}score ← 55
11 addBonus(score→ 55, bonus15);1213 std::cout << "bonus=" << bonus15 << std::endl;14 std::cout << "score=" << score55 << std::endl;15 return 0;16}outputbonus=15 score=55
Follow the Reference
scorestarts as40.bonusstarts as5.addBonus(score, bonus)receivesscoreby reference.- The function adds
5to the caller's originalscore. - The program prints
bonus=5andscore=45. | starting score | bonus | printed score | | --- | --- | --- | | 40 | 5 | 45 | | 25 | 5 | 30 | | 40 | 10 | 50 |
Exercise: references.cpp
Reproduce bonus=5 and score=45, then change only score to 25 to predict score=30, and change only bonus to 10 to predict score=50.