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