diff --git a/SimUDuck/main.cpp b/SimUDuck/main.cpp index 53d1faf..32718a7 100644 --- a/SimUDuck/main.cpp +++ b/SimUDuck/main.cpp @@ -23,6 +23,13 @@ class FlyNoWay : public FlyBehavior { } }; +class FlyRocketPowered : public FlyBehavior { +public: + void fly() override { + cout << "I’m flying with a rocket!\n"; + } +}; + class QuackBehavior { public: virtual void quack() = 0; @@ -79,6 +86,10 @@ class Duck { virtual void display() = 0; + void setFlyBehavior(FlyBehavior* fb) { + flyBehavior_ = move(unique_ptr(fb)); + } + private: string name_; unique_ptr flyBehavior_; @@ -136,6 +147,10 @@ int main() { ducks.emplace_back(new RubberDuck("Mark"s)); ducks.emplace_back(new WoodDuck("Alice"s)); + unique_ptr super_wood_duck(new WoodDuck("SuperDuck"s)); + super_wood_duck->setFlyBehavior(new FlyRocketPowered()); + ducks.emplace_back(move(super_wood_duck)); + for (const auto& duck : ducks) { duck->getName(); duck->display();