Templates
Class Templates
Class templates let a class store or return values without hard-coding one value type.
class template
A class template defines a family of classes, such as `Box<int>` and `Box<std::string>`.
Class Templates
class_templates.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <string>
template <typename T>
class Box {
private:
T value;
public:
Box(T initial) {
value = initial;
}
T get() const {
return value;
}
};
int main() {
int count = 4;
std::string label = "crate";
Box<int> countBox(count);
Box<std::string> labelBox(label);
std::cout << "count=" << countBox.get() << std::endl;
std::cout << "label=" << labelBox.get() << std::endl;
return 0;
}
#include <iostream>
#include <string>
template <typename T>
class Box {
private:
T value;
public:
Box(T initial) {
value = initial;
}
T get() const {
return value;
}
};
int main() {
int count = 1;
std::string label = "crate";
Box<int> countBox(count);
Box<std::string> labelBox(label);
std::cout << "count=" << countBox.get() << std::endl;
std::cout << "label=" << labelBox.get() << std::endl;
return 0;
}
#include <iostream>
#include <string>
template <typename T>
class Box {
private:
T value;
public:
Box(T initial) {
value = initial;
}
T get() const {
return value;
}
};
int main() {
int count = 9;
std::string label = "crate";
Box<int> countBox(count);
Box<std::string> labelBox(label);
std::cout << "count=" << countBox.get() << std::endl;
std::cout << "label=" << labelBox.get() << std::endl;
return 0;
}
#include <iostream>
#include <string>
template <typename T>
class Box {
private:
T value;
public:
Box(T initial) {
value = initial;
}
T get() const {
return value;
}
};
int main() {
int count = 4;
std::string label = "box";
Box<int> countBox(count);
Box<std::string> labelBox(label);
std::cout << "count=" << countBox.get() << std::endl;
std::cout << "label=" << labelBox.get() << std::endl;
return 0;
}
#include <iostream>
#include <string>
template <typename T>
class Box {
private:
T value;
public:
Box(T initial) {
value = initial;
}
T get() const {
return value;
}
};
int main() {
int count = 4;
std::string label = "bag";
Box<int> countBox(count);
Box<std::string> labelBox(label);
std::cout << "count=" << countBox.get() << std::endl;
std::cout << "label=" << labelBox.get() << std::endl;
return 0;
}
count ← 4, label ← crate, countBox ← (empty), labelBox ← (empty)
19int main() {20 int count→ 4 = 4; //@count=1, 921 std::string label→ crate = "crate"; //@label="box", "bag"2223 Box<int> countBox→ (empty)(count4);24 Box<std::string> labelBox→ (empty)(labelcrate);2526 std::cout << "count=" << countBox(empty).get() << std::endl;27 std::cout << "label=" << labelBox(empty).get() << std::endl;28 return 0;29}outputcount=4 label=crate
count ← 1, label ← crate, countBox ← (empty), labelBox ← (empty)
19int main() {20 int count→ 1 = 1;21 std::string label→ crate = "crate";2223 Box<int> countBox→ (empty)(count1);24 Box<std::string> labelBox→ (empty)(labelcrate);2526 std::cout << "count=" << countBox(empty).get() << std::endl;27 std::cout << "label=" << labelBox(empty).get() << std::endl;28 return 0;29}outputcount=1 label=crate
count ← 9, label ← crate, countBox ← (empty), labelBox ← (empty)
19int main() {20 int count→ 9 = 9;21 std::string label→ crate = "crate";2223 Box<int> countBox→ (empty)(count9);24 Box<std::string> labelBox→ (empty)(labelcrate);2526 std::cout << "count=" << countBox(empty).get() << std::endl;27 std::cout << "label=" << labelBox(empty).get() << std::endl;28 return 0;29}outputcount=9 label=crate
count ← 4, label ← box, countBox ← (empty), labelBox ← (empty)
19int main() {20 int count→ 4 = 4;21 std::string label→ box = "box";2223 Box<int> countBox→ (empty)(count4);24 Box<std::string> labelBox→ (empty)(labelbox);2526 std::cout << "count=" << countBox(empty).get() << std::endl;27 std::cout << "label=" << labelBox(empty).get() << std::endl;28 return 0;29}outputcount=4 label=box
count ← 4, label ← bag, countBox ← (empty), labelBox ← (empty)
19int main() {20 int count→ 4 = 4;21 std::string label→ bag = "bag";2223 Box<int> countBox→ (empty)(count4);24 Box<std::string> labelBox→ (empty)(labelbag);2526 std::cout << "count=" << countBox(empty).get() << std::endl;27 std::cout << "label=" << labelBox(empty).get() << std::endl;28 return 0;29}outputcount=4 label=bag