Иметь средство получения емкости.
Но пометить его как постоянный член:
unsigned int getCapacity() const
{ //^^^^^^^
return capacity;
}
Второе решение не работает.
Поскольку оно ненадежно (один пользователь может обновить его тогдаследующий пользователь получит недопустимое значение, когда прочитает его).
Хотя вам следует подумать, действительно ли пользователю вашего класса нужна эта информация.
Что он может с этим сделать?
Таким образом, вы хотите предварительно выделить память, если емкости недостаточно?
MyList x;
// I am going to add 10 items make sure there is enough room.
if (x.size() + 10 < x.capacity())
{ x.resize(x.size() + 10);
}
В этой ситуации просто всегда изменяйте размер.Затем заставьте ваш контейнер ничего не делать, если у него достаточно места.
x.resize(x.size() + 10); // If the container has enough space do nothing.
// Otherwise make sure there is enough room for 10 more items.
Обычно объекту лучше управлять собой, чем предоставлять доступ к своему внутреннему состоянию, чтобы другие объекты могли управлять им косвенно,Даже если вы отсоединяете реализацию от фактической переменной, вы все равно связываете себя с интерфейсом наличия емкости, и это не дает вам существенного преимущества.
Таким образом, методы должны (как правило) бытьдействия (глаголы), которые выполняют действия над объектом.Эти действия манипулируют состоянием объекта.Пусть действия будут интерфейсом к вашему объекту.Обратите внимание, что после определения интерфейса для объекта изменение этого интерфейса (удаление функциональности) становится очень сложным.