Лучше использовать контейнеры, предоставляемые STL, вместо описания вашего собственного (если вы не доказали его непригодность). Если (под) контейнеры упорядочены, но не отсортированы по их идентификатору, то vector
или deque
, вероятно, будут хорошим выбором. Все контейнеры STL имеют метод size()
, который сообщает количество элементов, хранящихся в контейнере.
Вы также не сделали ни одного из ваших участников общедоступным в своей модели. Вам нужно либо сделать их общедоступными, либо предоставить публичным пользователям, либо определить друзей. В качестве модели вы должны, вероятно, определить общедоступные интерфейсы, чтобы впоследствии вы могли изменять свою реализацию, оставив свою модель неповрежденной.
В вашей модели Document
выглядит точно так же, как Container
, за исключением ID, поэтому его можно было бы учитывать.
class Container;
typedef std::vector<Container> Containers;
class ContainerOwner
{
protected:
std::string m_name;
Containers m_list;
};
class Document : public ContainerOwner
{
public:
std::string & DocumentName() { return m_name; }
const std::string & DocumentName() const { return m_name; }
Containers & ContainerList() { return m_list; }
const Containers & ContainerList() const { return m_list; }
};
class Container : public ContainerOwner
{
int m_id;
public:
std::string & ContainerName() { return m_name; }
const std::string & ContainerName() const { return m_name; }
int & ContainerId() { return m_id; }
int ContainerId() const { return m_id; }
Containers & SubContainerList() { return m_list; }
const Containers & SubContainerList() const { return m_list; }
};
Просто, чтобы вы знали, что для классов только для названий с UpperCase, а для переменных и экземпляров - с именем camelCase. Просто разница в форматировании. Если вы заметите, что подсветка синтаксиса SO, имена переменных UpperCase отличаются от цветов, чем у camelCase. – C0deH4cker
Кажется, хороший подход. – james82345
Я также видел участников и методы, написанные как 'lowercase_with_underscores'; стандартная библиотека C++ увлекается этим стилем. Лично я использую соглашение C0deH4cker, потому что это устанавливает код пользователя отдельно от стандартного библиотечного кода. –