Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
#include <iostream> #include <string> #include <vector> #include <memory> // Abstract base — defines the interface class IRenderer { public: virtual ~IRenderer() = default; virtual void beginFrame() = 0; virtual void drawTriangle(float x, float y, float z) = 0; virtual void endFrame() = 0; // Non-pure helper that calls pure virtuals void renderScene(const std::vector<float>& vertices) { beginFrame(); for (std::size_t i = 0; i + 2 < vertices.size(); i += 3) drawTriangle(vertices[i], vertices[i+1], vertices[i+2]); endFrame(); } }; // Concrete implementation A class OpenGLRenderer : public IRenderer { public: void beginFrame() override { std::cout << "[GL] Begin frame "; } void drawTriangle(float x, float y, float z) override { std::cout << "[GL] Triangle (" << x<<","<<y<<","<<z<<") "; } void endFrame() override { std::cout << "[GL] End frame "; } }; // Concrete implementation B class ConsoleRenderer : public IRenderer { public: void beginFrame() override { std::cout << "[CON] --- "; } void drawTriangle(float x, float y, float z) override { std::cout << "[CON] tri " << x<<" "<<y<<" "<<z<<" "; } void endFrame() override { std::cout << "[CON] --- "; } }; int main() { std::vector<float> verts = {0,0,0, 1,0,0, 0,1,0}; std::unique_ptr<IRenderer> r = std::make_unique<OpenGLRenderer>(); r->renderScene(verts); r = std::make_unique<ConsoleRenderer>(); r->renderScene(verts); return 0; }
Result
Open