博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Headfirst设计模式的C++实现——迭代器(Iterator)
阅读量:5075 次
发布时间:2019-06-12

本文共 2932 字,大约阅读时间需要 9 分钟。

iterator.h

1 #ifndef _ITERATOR_H_ 2 #define _ITERATOR_H_ 3  4 #include "menu_item.h" 5  6 class Iterator { 7 public: 8     virtual bool has_next() = 0; 9     virtual MenuItem *next() = 0; 10 };11 #endif

menu_item.h

1 #ifndef _MENU_ITEM_H_ 2 #define _MENU_ITEM_H_ 3  4 #include 
5 6 class MenuItem { 7 private: 8 std::string name; 9 std::string description;10 bool vegetarian;11 double price;12 public:13 MenuItem( const std::string &_name,14 const std::string _description,15 bool _vegetarian,16 double _price) :17 name(_name),18 description(_description),19 vegetarian(_vegetarian),20 price(_price) {}21 22 std::string get_name() { return name; }23 std::string get_description() { return description; }24 double get_price() { return price; }25 bool is_vegetarian() { return vegetarian; }26 };27 #endif

pancake_house_menu.h

1 #ifndef _PANCAKE_HOUSE_MENU_H_ 2 #define _PANCAKE_HOUSE_MENU_H_ 3  4 #include "menu_item.h" 5 #include "iterator.h" 6  7 class PancakeHouseMenu { 8 public: 9     void add_item(const std::string& name,10                   const std::string& description,11                   bool vegetarian,12                   double price) {13         if ( item_num < MAX_ITEMS ) {14            menu_items[item_num++] = new MenuItem( name, description, vegetarian, price ); 15         }16     }17     18     PancakeHouseMenu() : item_num(0), iterator(*this) {19         add_item("name_1", "descrption_1", true, 4.5);20         add_item("name_2", "descrption_2", true, 6.2);21         add_item("name_3", "descrption_3", false, 3.5);22     }23     24     ~PancakeHouseMenu() {25         for ( int i = 0; i < item_num; i++ ) {26             delete menu_items[i];27         }28     }29  30     Iterator *get_iterator() {31         return &iterator;32     }33     34 private:35     class _Iterator : public Iterator {36     private:37         PancakeHouseMenu &menu;38         int pos; 39     public:40         _Iterator( PancakeHouseMenu &_menu) : pos(0), menu(_menu) {}41         bool has_next() { return pos < menu.item_num; }42         MenuItem *next() {43             return menu.menu_items[pos++];44         }45     } iterator;46     47     const static int MAX_ITEMS = 6;48     MenuItem *menu_items[MAX_ITEMS];49     int item_num;50 };51 #endif

main.cpp

1 #include "pancake_house_menu.h" 2 #include 
3 4 int main() { 5 PancakeHouseMenu menu; 6 Iterator *iterator = menu.get_iterator(); 7 while ( iterator->has_next() ) { 8 MenuItem *menu_item = iterator->next(); 9 std::cout << menu_item->get_name() << " "10 << menu_item->get_description() << " "11 << menu_item->is_vegetarian() << " "12 << menu_item->get_price() << std::endl;13 }14 }

 

转载于:https://www.cnblogs.com/ren-yu/p/5554901.html

你可能感兴趣的文章