Вы уже приняли ответ @ unapersson, но для протокола я бы сделал это ...
std::string getDesc() const
{
std::ostringstream ss;
ss << getName() << "\t" << Damage << "\t" << Cost;
return ss.str();
}
Он создает только один объект потока вместо того, чтобы создавать и выбрасывать их для каждого преобразования, и выглядит немного лучше.
(Это способ C ++ - здесь нет общего элемента toString, как в других языках, обычно мы используем строковые потоки или одноразовую функцию, как в ответе @ unapersson.)