Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
#include <iostream> // Common base class Device { public: virtual ~Device() = default; void powerOn() const { std::cout << "Device powered on "; } }; // Two intermediate classes — use virtual inheritance class Scanner : virtual public Device { public: void scan() const { std::cout << "Scanning document "; } }; class Printer : virtual public Device { public: void print() const { std::cout << "Printing document "; } }; // Diamond: inherits Scanner and Printer — only ONE Device subobject class AllInOne : public Scanner, public Printer { public: void doAll() const { powerOn(); // unambiguous — single Device subobject scan(); print(); } }; // Interface (abstract class) — preferred over deep hierarchies class ISerializable { public: virtual std::string serialize() const = 0; virtual ~ISerializable() = default; }; class Document : public ISerializable { public: explicit Document(const std::string& text) : text_(text) {} std::string serialize() const override { return text_; } private: std::string text_; }; int main() { AllInOne aio; aio.doAll(); ISerializable* doc = new Document("Hello, world"); std::cout << doc->serialize() << " "; delete doc; return 0; }
Result
Open