Classes
Composition
Composition builds a larger object from smaller objects.
composition
Composition means one class stores another class as a member field.
Composition
composition.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <string>
class Battery {
private:
int charge;
public:
Battery(int startingCharge) {
charge = startingCharge;
}
void use(int amount) {
charge -= amount;
}
int remaining() {
return charge;
}
};
class Robot {
private:
std::string name;
Battery battery;
public:
Robot(std::string robotName, int startingCharge) : name(robotName), battery(startingCharge) {
}
void work(int minutes) {
battery.use(minutes * 2);
}
void printStatus() {
std::cout << "robot=" << name << std::endl;
std::cout << "charge=" << battery.remaining() << std::endl;
}
};
int main() {
std::string robotName = "Bolt";
int minutes = 3;
Robot robot(robotName, 20);
robot.work(minutes);
robot.printStatus();
return 0;
}
#include <iostream>
#include <string>
class Battery {
private:
int charge;
public:
Battery(int startingCharge) {
charge = startingCharge;
}
void use(int amount) {
charge -= amount;
}
int remaining() {
return charge;
}
};
class Robot {
private:
std::string name;
Battery battery;
public:
Robot(std::string robotName, int startingCharge) : name(robotName), battery(startingCharge) {
}
void work(int minutes) {
battery.use(minutes * 2);
}
void printStatus() {
std::cout << "robot=" << name << std::endl;
std::cout << "charge=" << battery.remaining() << std::endl;
}
};
int main() {
std::string robotName = "Ivy";
int minutes = 3;
Robot robot(robotName, 20);
robot.work(minutes);
robot.printStatus();
return 0;
}
#include <iostream>
#include <string>
class Battery {
private:
int charge;
public:
Battery(int startingCharge) {
charge = startingCharge;
}
void use(int amount) {
charge -= amount;
}
int remaining() {
return charge;
}
};
class Robot {
private:
std::string name;
Battery battery;
public:
Robot(std::string robotName, int startingCharge) : name(robotName), battery(startingCharge) {
}
void work(int minutes) {
battery.use(minutes * 2);
}
void printStatus() {
std::cout << "robot=" << name << std::endl;
std::cout << "charge=" << battery.remaining() << std::endl;
}
};
int main() {
std::string robotName = "Max";
int minutes = 3;
Robot robot(robotName, 20);
robot.work(minutes);
robot.printStatus();
return 0;
}
#include <iostream>
#include <string>
class Battery {
private:
int charge;
public:
Battery(int startingCharge) {
charge = startingCharge;
}
void use(int amount) {
charge -= amount;
}
int remaining() {
return charge;
}
};
class Robot {
private:
std::string name;
Battery battery;
public:
Robot(std::string robotName, int startingCharge) : name(robotName), battery(startingCharge) {
}
void work(int minutes) {
battery.use(minutes * 2);
}
void printStatus() {
std::cout << "robot=" << name << std::endl;
std::cout << "charge=" << battery.remaining() << std::endl;
}
};
int main() {
std::string robotName = "Bolt";
int minutes = 1;
Robot robot(robotName, 20);
robot.work(minutes);
robot.printStatus();
return 0;
}
#include <iostream>
#include <string>
class Battery {
private:
int charge;
public:
Battery(int startingCharge) {
charge = startingCharge;
}
void use(int amount) {
charge -= amount;
}
int remaining() {
return charge;
}
};
class Robot {
private:
std::string name;
Battery battery;
public:
Robot(std::string robotName, int startingCharge) : name(robotName), battery(startingCharge) {
}
void work(int minutes) {
battery.use(minutes * 2);
}
void printStatus() {
std::cout << "robot=" << name << std::endl;
std::cout << "charge=" << battery.remaining() << std::endl;
}
};
int main() {
std::string robotName = "Bolt";
int minutes = 5;
Robot robot(robotName, 20);
robot.work(minutes);
robot.printStatus();
return 0;
}
robotName ← Bolt, minutes ← 3
41int main() {42 std::string robotName→ Bolt = "Bolt"; //@robotName="Ivy", "Max"43 int minutes→ 3 = 3; //@minutes=1, 54445 Robot robot(robotNameBolt, 20);46 robot.work(minutes);charge ← 20
8public:9 Battery(int startingCharge20) {10 charge→ 20 = startingCharge20;11 }Robot(std::string robotName, int startingCharge) : name(robotName), ba…
27public:28 Robot(std::string robotNameBolt, int startingCharge20) : name(robotName), battery(startingCharge) {29 }robot ← (empty)
45Robot robot→ (empty)(robotNameBolt, 20);46robot(empty).work(minutes3);47robot.printStatus();void work(int minutes)
31void work(int minutes3) {32 battery.use(minutes3 * 2);33}charge ← 14
13void use(int amount6) {14 charge→ 14 -= amount6;15}battery.use(minutes * 2);
31void work(int minutes) {32 battery.use(minutes3 * 2);33}robot.work(minutes);
45Robot robot(robotName, 20);46robot(empty).work(minutes3);47robot(empty).printStatus();48return 0;void printStatus()
35void printStatus() {36 std::cout << "robot=" << name << std::endl;37 std::cout << "charge=" << battery.remaining() << std::endl;38}outputrobot=Boltint remaining()
17int remaining() {18 return charge14;19}std::cout << "charge=" << battery.remaining() << std::endl;
36 std::cout << "robot=" << name << std::endl;37 std::cout << "charge=" << battery.remaining() << std::endl;38}outputcharge=14robot.printStatus();
46 robot.work(minutes);47 robot(empty).printStatus();48 return 0;49}
robotName ← Ivy, minutes ← 3
41int main() {42 std::string robotName→ Ivy = "Ivy";43 int minutes→ 3 = 3;4445 Robot robot(robotNameIvy, 20);46 robot.work(minutes);charge ← 20
8public:9 Battery(int startingCharge20) {10 charge→ 20 = startingCharge20;11 }Robot(std::string robotName, int startingCharge) : name(robotName), ba…
27public:28 Robot(std::string robotNameIvy, int startingCharge20) : name(robotName), battery(startingCharge) {29 }robot ← (empty)
45Robot robot→ (empty)(robotNameIvy, 20);46robot(empty).work(minutes3);47robot.printStatus();void work(int minutes)
31void work(int minutes3) {32 battery.use(minutes3 * 2);33}charge ← 14
13void use(int amount6) {14 charge→ 14 -= amount6;15}battery.use(minutes * 2);
31void work(int minutes) {32 battery.use(minutes3 * 2);33}robot.work(minutes);
45Robot robot(robotName, 20);46robot(empty).work(minutes3);47robot(empty).printStatus();48return 0;void printStatus()
35void printStatus() {36 std::cout << "robot=" << name << std::endl;37 std::cout << "charge=" << battery.remaining() << std::endl;38}outputrobot=Ivyint remaining()
17int remaining() {18 return charge14;19}std::cout << "charge=" << battery.remaining() << std::endl;
36 std::cout << "robot=" << name << std::endl;37 std::cout << "charge=" << battery.remaining() << std::endl;38}outputcharge=14robot.printStatus();
46 robot.work(minutes);47 robot(empty).printStatus();48 return 0;49}
robotName ← Max, minutes ← 3
41int main() {42 std::string robotName→ Max = "Max";43 int minutes→ 3 = 3;4445 Robot robot(robotNameMax, 20);46 robot.work(minutes);charge ← 20
8public:9 Battery(int startingCharge20) {10 charge→ 20 = startingCharge20;11 }Robot(std::string robotName, int startingCharge) : name(robotName), ba…
27public:28 Robot(std::string robotNameMax, int startingCharge20) : name(robotName), battery(startingCharge) {29 }robot ← (empty)
45Robot robot→ (empty)(robotNameMax, 20);46robot(empty).work(minutes3);47robot.printStatus();void work(int minutes)
31void work(int minutes3) {32 battery.use(minutes3 * 2);33}charge ← 14
13void use(int amount6) {14 charge→ 14 -= amount6;15}battery.use(minutes * 2);
31void work(int minutes) {32 battery.use(minutes3 * 2);33}robot.work(minutes);
45Robot robot(robotName, 20);46robot(empty).work(minutes3);47robot(empty).printStatus();48return 0;void printStatus()
35void printStatus() {36 std::cout << "robot=" << name << std::endl;37 std::cout << "charge=" << battery.remaining() << std::endl;38}outputrobot=Maxint remaining()
17int remaining() {18 return charge14;19}std::cout << "charge=" << battery.remaining() << std::endl;
36 std::cout << "robot=" << name << std::endl;37 std::cout << "charge=" << battery.remaining() << std::endl;38}outputcharge=14robot.printStatus();
46 robot.work(minutes);47 robot(empty).printStatus();48 return 0;49}
robotName ← Bolt, minutes ← 1
41int main() {42 std::string robotName→ Bolt = "Bolt";43 int minutes→ 1 = 1;4445 Robot robot(robotNameBolt, 20);46 robot.work(minutes);charge ← 20
8public:9 Battery(int startingCharge20) {10 charge→ 20 = startingCharge20;11 }Robot(std::string robotName, int startingCharge) : name(robotName), ba…
27public:28 Robot(std::string robotNameBolt, int startingCharge20) : name(robotName), battery(startingCharge) {29 }robot ← (empty)
45Robot robot→ (empty)(robotNameBolt, 20);46robot(empty).work(minutes1);47robot.printStatus();void work(int minutes)
31void work(int minutes1) {32 battery.use(minutes1 * 2);33}charge ← 18
13void use(int amount2) {14 charge→ 18 -= amount2;15}battery.use(minutes * 2);
31void work(int minutes) {32 battery.use(minutes1 * 2);33}robot.work(minutes);
45Robot robot(robotName, 20);46robot(empty).work(minutes1);47robot(empty).printStatus();48return 0;void printStatus()
35void printStatus() {36 std::cout << "robot=" << name << std::endl;37 std::cout << "charge=" << battery.remaining() << std::endl;38}outputrobot=Boltint remaining()
17int remaining() {18 return charge18;19}std::cout << "charge=" << battery.remaining() << std::endl;
36 std::cout << "robot=" << name << std::endl;37 std::cout << "charge=" << battery.remaining() << std::endl;38}outputcharge=18robot.printStatus();
46 robot.work(minutes);47 robot(empty).printStatus();48 return 0;49}
robotName ← Bolt, minutes ← 5
41int main() {42 std::string robotName→ Bolt = "Bolt";43 int minutes→ 5 = 5;4445 Robot robot(robotNameBolt, 20);46 robot.work(minutes);charge ← 20
8public:9 Battery(int startingCharge20) {10 charge→ 20 = startingCharge20;11 }Robot(std::string robotName, int startingCharge) : name(robotName), ba…
27public:28 Robot(std::string robotNameBolt, int startingCharge20) : name(robotName), battery(startingCharge) {29 }robot ← (empty)
45Robot robot→ (empty)(robotNameBolt, 20);46robot(empty).work(minutes5);47robot.printStatus();void work(int minutes)
31void work(int minutes5) {32 battery.use(minutes5 * 2);33}charge ← 10
13void use(int amount10) {14 charge→ 10 -= amount10;15}battery.use(minutes * 2);
31void work(int minutes) {32 battery.use(minutes5 * 2);33}robot.work(minutes);
45Robot robot(robotName, 20);46robot(empty).work(minutes5);47robot(empty).printStatus();48return 0;void printStatus()
35void printStatus() {36 std::cout << "robot=" << name << std::endl;37 std::cout << "charge=" << battery.remaining() << std::endl;38}outputrobot=Boltint remaining()
17int remaining() {18 return charge10;19}std::cout << "charge=" << battery.remaining() << std::endl;
36 std::cout << "robot=" << name << std::endl;37 std::cout << "charge=" << battery.remaining() << std::endl;38}outputcharge=10robot.printStatus();
46 robot.work(minutes);47 robot(empty).printStatus();48 return 0;49}