我的功能应该叫什么?

时间:2014-09-26 20:15:27

标签: c++ function class templates abstract-data-type

所以我有一个类定义为

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 main中我有

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

1 个答案:

答案 0 :(得分:3)

为了显示Bag的内容,函数DisplayBag必须能够找出 的内容。我能看到的唯一功能就是vector<ItemType> ToVector() const;。从此函数中获得vector<ItemType>之后,您应该能够通过迭代vector<ItemType>的元素来显示数据。 (您能够使用[i]语法,因为vector定义了operator[]。)

当然,与此同时,您必须在新数据结构中对Bag中的所有内容进行额外复制,以便显示它。

我真诚地希望这次演习的目的是为你提供一个对象课程 界面设计不良的后果,以及你的教授计划展示的 稍后您将如何编写此接口