class Base {
virtual ~Base(void) {}
virtual char const * GetName() const = 0;
};

class Hoge : public Base {
public:
static char const * GetName_() { return "Hoge"; }
char const * GetName() const { return GetName_(); }
};

名前かぶっちゃったんだけどどうしよう
両方共publicにしたいからアンダースコアとかで誤魔化したくない