Elegant Circular Buffer
Improve the wrap-around logic
There's obvious inefficiency in:
head %= bufferSize;

% uses division, but because we're incrementing, we know that head / bufferSize is at most 1.  Instead, we can:
if (++head &gt;= bufferSize)
    head -= bufferSize;

On architectures such as ARM, there's no branch here, as any decent compiler will just use a condition flag on the subtraction.

Consider checking for overrun and underrun
At the moment, this buffer has no checking for the read and write positions crossing each other.  Perhaps that's what you need, but it's quite unusual to have an unchecked circular buffer, and if you were holding (e.g.) audio data, you can imagine how it would sound, given the output you show.

Match new and delete
Since you create buffer using new[], you must use the array form delete[] in the destructor:
CyclicBuffer::~CyclicBuffer()
{
    delete[] buffer;
}


Style points
Prefer initializers to assignment
A constructor should initialize all the members of the class:
CyclicBuffer::CyclicBuffer(std::size_t buffSize)
  : buffer(new char[bufferSize]),
    bufferSize(buffSize),
    head(0),
    tail(0)
{
}

A good compiler will warn you if you have uninitialized members (e.g. g++ -Wall -Wextra).
Note that I've also changed the argument to be a size_t, as a negative size is meaningless.  The int members should all be size_t, too.
Avoid numeric character constants
What's special about the number 45?  If you care about its character value, (and if you're using an ASCII-like system), it's clearer to write '-' instead.
Drop the commented-out code
I don't want to see using std::namespace;, ever.  Not even in a comment.