Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Composite pattern
//clang 3.7.0 #include <iostream> #include <algorithm> #include <list> #include <cassert> class Unit { public: virtual int strength() const = 0; virtual int health() const = 0; virtual void addUnit(Unit*) { assert(!"Not implemented"); } virtual void removeUnit(Unit*) { assert(!"Not implemented"); } }; class Warrior : public Unit { public: virtual int strength() const override { return 200; } virtual int health() const override { return 1000; } }; class Archer : public Unit { public: virtual int strength() const override { return 700; } virtual int health() const override { return 400; } }; class Warlord : public Unit { public: virtual int strength() const override { return 500; } virtual int health() const override { return 800; } }; class Army : public Unit { public: virtual int strength() const override { int strength = 0; for(auto it : m_units) { strength += it->strength(); } return strength; } virtual int health() const override { int health = 0; for(auto it : m_units) { health += it->health(); } return health; } virtual void addUnit(Unit* u) override { m_units.push_back(u); } virtual void removeUnit(Unit* u) override { auto it = std::find(m_units.begin(), m_units.end(), u); if(it != m_units.end()) { m_units.erase(it); } } private: std::list<Unit*> m_units; }; int main() { Army a1, a2; for(int i = 0; i < 500; ++i) { a1.addUnit(new Warrior); } for(int i = 0; i < 500; ++i) { a1.addUnit(new Archer); } for(int i = 0; i < 1000; ++i) { a2.addUnit(new Warlord); } std::cout << "A1 = " << a1.strength() << std::endl; }
run
|
edit
|
history
|
help
0
hello world 3
auto Keyword Example
Rounding float to nearest 1000
Dynamically allocated array in unique_ptr with custom deleter.
program_4
IsContainer
isnan_constexpr
C++17 function traits not works
C++ standard
12/2