Вот мой лучший ответ на ваш вопрос ...
Хорошая структура наследования очень специфична для конкретного контекста, но основной принцип заключается в том, что базовый класс содержит данные и функции, относящиеся ко всем производным классам. Производные классы будут содержать конкретные данные и функции для себя. В вашем случае в базовом классе «персонаж» будет много данных, таких как все характеристики персонажа и функции, которые вычисляют результат на основе статистики (я предполагаю, что правила игры, как правило, не зависят от класса).
Я также предполагаю, что когда вы говорите «classname.cpp», вы имеете в виду «fighter.cpp», «cleric.cpp» и т. Д. В таком случае, да, я бы согласился с тем, чтобы это структурировалось таким образом.
STL на самом деле не имеет прямого отношения к созданию иерархий классов, поэтому я бы сказал, нет, это не связано.
Что касается пространств имен, то каждый раз, когда вы указываете пространство имен, оно будет таким же, как и везде, где вы указываете точно такое же имя (о чем я и спрашиваю). Вам не нужно делать ничего особенного, чтобы сделать его тем же пространством имен, кроме того, чтобы называть его одинаково точно. Простой пример выглядит следующим образом:
character.h
namespace d20
{
class Character
{
Character();
~Character();
//etc...
}
}
character.cpp
#include "character.h"
namespace d20
{
Character::Character()
{
// Stuff...
}
Character::~Character()
{
}
}
fighter.h
#include "character.h"
namespace d20
{
class Fighter : public Character
{
Fighter ();
~Fighter ();
//etc...
}
}
ИЛИ (без ключевого слова пространства имен)
#include "character.h"
class Fighter : public d20::Character
{
Fighter ();
~Fighter ();
//etc...
}
Редактировать: Обратите внимание, что во втором случае класс Fighter НЕ является пространством имен d20, он просто происходит от класса в этом пространстве имен.