2014-09-26 98 views
0

所以我有一個類定義爲這樣我的功能應該調用什麼?

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 
+4

這個類的定義似乎是可疑的;爲什麼'Bag'有一種顯示另一個*'Bag'的方法? – 2014-09-26 20:17:04

+1

你確定'DisplayBag'不是'靜態'嗎? – 2014-09-26 20:18:54

+1

@OliverCharlesworth:注意使用「教授」一詞。 – Beta 2014-09-26 20:26:32

回答

3

爲了顯示Bag的內容,功能DisplayBag必須能夠找出哪些內容。我能看到的唯一功能是vector<ItemType> ToVector() const;。從此功能獲得vector<ItemType>後,您應該可以通過遍歷vector<ItemType>的元素來顯示數據。 (您能夠使用[i]語法,然後因爲vector定義operator[]

當然,在你不得不作出的Bag在一個新的數據結構的一切額外的副本僅僅是爲了在其間顯示它。

我真誠地希望,此次演習的目的是給你一個對象教訓 的不良界面設計的後果,那你的教授有計劃地告訴你以後怎麼這個接口應該寫 。

+0

不幸的是,經驗讓我相信教授可能不會教以後如何做到這一點。 – o11c 2014-09-26 21:23:15

+0

謝謝你的回答。大部分這些東西對我來說都是非常新鮮的東西,我還沒有被教過什麼是模板,並且沒有足夠的構造器經驗。所以我想要做'grabBag.ToVector();'然後'DisplayBag(grabBag)'?我試過這個,'operator []'仍然沒有定義。 – anonuser1234 2014-09-26 21:45:48

+0

好吧,我設法通過聲明\t'vector someVector = grabBag.ToVector();'然後DisplayBag(someVector);'但我不得不改變我最初的'void DisplayBag(const Bag &a_bag); '到 'void DisplayBag(const vector &a_bag);'無論如何保持它作爲一個包? – anonuser1234 2014-09-26 22:09:31

相關問題