Composition builds a larger object from smaller objects.

Composition

composition.cpp
#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 = ;
    int minutes = ;

    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 = ;
    int minutes = ;

    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 = ;
    int minutes = ;

    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 = ;
    int minutes = ;

    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 = ;
    int minutes = ;

    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 = ;
    int minutes = ;

    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 = ;
    int minutes = ;

    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 = ;
    int minutes = ;

    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 = ;
    int minutes = ;

    Robot robot(robotName, 20);
    robot.work(minutes);
    robot.printStatus();
    return 0;
}
composition Composition means one class stores another class as a member field.