#include struct Reader { virtual int read() const = 0; virtual ~Reader() = default; }; struct Writer { virtual void write(int value) = 0; virtual ~Writer() = default; }; class Cell final : public Reader, public Writer { int value_ = 3; public: int read() const override { return value_; } void write(int value) override { value_ = value; } }; int main() { Cell cell; Reader* reader = &cell; Writer* writer = &cell; assert(reader->read() == 3); writer->write(8); assert(reader->read() == 8); assert(dynamic_cast(reader) == writer); assert(dynamic_cast(reader) == static_cast(&cell)); }