# Message

Most C++ developers intuitively choose to express every independent message as a separate class, which inherit from a common interface.

![Image: Message class hierarchy](https://1880759427-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3rfv4IoB7S7FzEMIS_%2F-M3rfw_Pv45v1zY3gfYU%2F-M3rg-LtRN8YGT21ZuMf%2Fmessage.png?generation=1585777231175138\&alt=media)

This is a step to the **right** direction. It becomes easy and convenient to write a common code that suites all possible messages:

```cpp
class Message 
{
public:
    void write(...) const {
        writeImpl(...);
    }
    ...
protected:
    // Implements writing to a buffer functionality
    virtual void writeImpl(...) const = 0;
};

class ActualMessage1 : public Message 
{
    ...
protected:
    virtual void writeImpl(...) const override {...};
};

class ActualMessage2 : public Message 
{
    ...
protected:
    virtual void writeImpl(...) const override {...};
};

// Send any message
void sendMessage(const Message& msg)
{
    ...
    msg.write(...); // write message to a buffer
    ...// send buffer contents over I/O link;
}
```
