Итак, у меня есть класс, определенный как таковой
template<class ItemType>
class Bag : public BagInterface<ItemType>
{
public:
Bag();
Bag(const ItemType &an_item); // contrusctor thats constructs for a signal item.
int GetCurrentSize() const;
bool IsEmpty() const;
bool Add(const ItemType& new_entry);
bool Remove(const ItemType& an_entry);
void Clear();
bool Contains(const ItemType& an_entry) const;
int GetFrequencyOf(const ItemType& an_entry) const;
vector<ItemType> ToVector() const;
private:
int GetIndexOf(const ItemType& target) const;
static const int kDefaultBagSize_ = 6;
ItemType items_[kDefaultBagSize_]; // array of bag items
int item_count_; // current count of bag items
int max_items_; // max capacity of the bag
и мой профессор специально спрашивает, что мы используем функцию
void DisplayBag(const Bag<ItemType> &a_bag);
проблема в том, что я не знаю, как заставить его работать.
Например, в моем главном Int у меня есть
Bag<string> grabBag;
grabBag.Add(1);
Display(grabBag);
тогда в моей функции отображения у меня есть.
void DisplayBag(const Bag<ItemType> &a_bag)
{
int j = 6;
for(int i = 0; i < j; i++)
{
cout << a_bag[i] << endl;
}
}
Я попытался возиться с этим кодом несколькими способами, и ничего не работает. я имею
void DisplayBag(const Bag<ItemType> &a_bag);
Объявленный перед моим int main () и самой функцией он записан в том же заголовочном файле реализации класса.
векторная функция
template<class ItemType>
vector<ItemType> Bag<ItemType>::ToVector() const
{
vector<ItemType> bag_contents;
for (int i = 0; i < item_count_; i++)
bag_contents.push_back(items_[i]);
return bag_contents;
} // end toVector
Для отображения содержимого Bag
, функция DisplayBag
должен быть в состоянии выяснить, что содержимое являются. Единственная функция, с помощью которой я могу это сделать, это vector<ItemType> ToVector() const;
, Как только вы получили vector<ItemType>
из этой функции вы сможете отображать данные, просматривая элементы vector<ItemType>
, (Вы будут быть в состоянии использовать [i]
Синтаксис тогда, потому что vector
определяет operator[]
.)
Конечно, в то же время вам пришлось сделать дополнительную копию всего в Bag
в новой структуре данных просто для того, чтобы отобразить ее.
Я искренне надеюсь, что цель этого упражнения — дать вам наглядный урок
последствия плохого дизайна интерфейса, и что ваш профессор планирует показать
Вы позже, как этот интерфейс должен быть написано