#pragma once class Drawable; class RenderTarget { public: void draw(const Drawable& drawable); }; class Drawable { public: virtual void draw(RenderTarget& target) const = 0; }; class Shape : public Drawable { public: void draw(RenderTarget& target) const override; };