Functions
Overloads
Overloaded functions share a name but accept different parameter types or counts.
overload
C++ chooses the overload whose parameter list best matches the arguments in the call.
Overloads
overloads.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <string>
std::string describe(int count) {
return "count=" + std::to_string(count);
}
std::string describe(std::string label) {
return "label=" + label;
}
int main() {
int count = 3;
std::string label = "ready";
std::string countMessage = describe(count);
std::string labelMessage = describe(label);
std::cout << countMessage << std::endl;
std::cout << labelMessage << std::endl;
return 0;
}
#include <iostream>
#include <string>
std::string describe(int count) {
return "count=" + std::to_string(count);
}
std::string describe(std::string label) {
return "label=" + label;
}
int main() {
int count = 1;
std::string label = "ready";
std::string countMessage = describe(count);
std::string labelMessage = describe(label);
std::cout << countMessage << std::endl;
std::cout << labelMessage << std::endl;
return 0;
}
#include <iostream>
#include <string>
std::string describe(int count) {
return "count=" + std::to_string(count);
}
std::string describe(std::string label) {
return "label=" + label;
}
int main() {
int count = 5;
std::string label = "ready";
std::string countMessage = describe(count);
std::string labelMessage = describe(label);
std::cout << countMessage << std::endl;
std::cout << labelMessage << std::endl;
return 0;
}
#include <iostream>
#include <string>
std::string describe(int count) {
return "count=" + std::to_string(count);
}
std::string describe(std::string label) {
return "label=" + label;
}
int main() {
int count = 3;
std::string label = "queued";
std::string countMessage = describe(count);
std::string labelMessage = describe(label);
std::cout << countMessage << std::endl;
std::cout << labelMessage << std::endl;
return 0;
}
#include <iostream>
#include <string>
std::string describe(int count) {
return "count=" + std::to_string(count);
}
std::string describe(std::string label) {
return "label=" + label;
}
int main() {
int count = 3;
std::string label = "done";
std::string countMessage = describe(count);
std::string labelMessage = describe(label);
std::cout << countMessage << std::endl;
std::cout << labelMessage << std::endl;
return 0;
}
count ← 3, label ← ready
12int main() {13 int count→ 3 = 3; //@count=1, 514 std::string label→ ready = "ready"; //@label="queued", "done"1516 std::string countMessage = describe(count3);17 std::string labelMessage = describe(label);std::string describe(int count)
4std::string describe(int count3) {5 return "count=" + std::to_string(count3);6}countMessage ← count=3
16std::string countMessage→ count=3 = describe(count3);17std::string labelMessage = describe(labelready);std::string describe(std::string label)
8std::string describe(std::string labelready) {9 return "label=" + labelready;10}labelMessage ← label=ready
16 std::string countMessage = describe(count);17 std::string labelMessage→ label=ready = describe(labelready);1819 std::cout << countMessagecount=3 << std::endl;20 std::cout << labelMessagelabel=ready << std::endl;21 return 0;22}outputcount=3 label=ready
count ← 1, label ← ready
12int main() {13 int count→ 1 = 1;14 std::string label→ ready = "ready";1516 std::string countMessage = describe(count1);17 std::string labelMessage = describe(label);std::string describe(int count)
4std::string describe(int count1) {5 return "count=" + std::to_string(count1);6}countMessage ← count=1
16std::string countMessage→ count=1 = describe(count1);17std::string labelMessage = describe(labelready);std::string describe(std::string label)
8std::string describe(std::string labelready) {9 return "label=" + labelready;10}labelMessage ← label=ready
16 std::string countMessage = describe(count);17 std::string labelMessage→ label=ready = describe(labelready);1819 std::cout << countMessagecount=1 << std::endl;20 std::cout << labelMessagelabel=ready << std::endl;21 return 0;22}outputcount=1 label=ready
count ← 5, label ← ready
12int main() {13 int count→ 5 = 5;14 std::string label→ ready = "ready";1516 std::string countMessage = describe(count5);17 std::string labelMessage = describe(label);std::string describe(int count)
4std::string describe(int count5) {5 return "count=" + std::to_string(count5);6}countMessage ← count=5
16std::string countMessage→ count=5 = describe(count5);17std::string labelMessage = describe(labelready);std::string describe(std::string label)
8std::string describe(std::string labelready) {9 return "label=" + labelready;10}labelMessage ← label=ready
16 std::string countMessage = describe(count);17 std::string labelMessage→ label=ready = describe(labelready);1819 std::cout << countMessagecount=5 << std::endl;20 std::cout << labelMessagelabel=ready << std::endl;21 return 0;22}outputcount=5 label=ready
count ← 3, label ← queued
12int main() {13 int count→ 3 = 3;14 std::string label→ queued = "queued";1516 std::string countMessage = describe(count3);17 std::string labelMessage = describe(label);std::string describe(int count)
4std::string describe(int count3) {5 return "count=" + std::to_string(count3);6}countMessage ← count=3
16std::string countMessage→ count=3 = describe(count3);17std::string labelMessage = describe(labelqueued);std::string describe(std::string label)
8std::string describe(std::string labelqueued) {9 return "label=" + labelqueued;10}labelMessage ← label=queued
16 std::string countMessage = describe(count);17 std::string labelMessage→ label=queued = describe(labelqueued);1819 std::cout << countMessagecount=3 << std::endl;20 std::cout << labelMessagelabel=queued << std::endl;21 return 0;22}outputcount=3 label=queued
count ← 3, label ← done
12int main() {13 int count→ 3 = 3;14 std::string label→ done = "done";1516 std::string countMessage = describe(count3);17 std::string labelMessage = describe(label);std::string describe(int count)
4std::string describe(int count3) {5 return "count=" + std::to_string(count3);6}countMessage ← count=3
16std::string countMessage→ count=3 = describe(count3);17std::string labelMessage = describe(labeldone);std::string describe(std::string label)
8std::string describe(std::string labeldone) {9 return "label=" + labeldone;10}labelMessage ← label=done
16 std::string countMessage = describe(count);17 std::string labelMessage→ label=done = describe(labeldone);1819 std::cout << countMessagecount=3 << std::endl;20 std::cout << labelMessagelabel=done << std::endl;21 return 0;22}outputcount=3 label=done
Follow the Overloads
countstarts as3.labelstarts asready.describe(count)uses the overload that accepts anint.describe(label)uses the overload that accepts astring.- The program prints
count=3andlabel=ready. | call | overload chosen | output | | --- | --- | --- | |describe(count)|int| count=3 | |describe(label)|string| label=ready |
Exercise: overloads.cpp
Reproduce count=3 and label=ready, then change only count to 5 to predict count=5, and change only label to done to predict label=done.