menuitem.hpp
来自「深入浅出设计模式(书配套c++源代码)。包含20个设计模式的c++实现。」· HPP 代码 · 共 79 行
HPP
79 行
#ifndef _HFDP_CPP_VISITOR_MENUS_MENU_ITEM_HPP_#define _HFDP_CPP_VISITOR_MENUS_MENU_ITEM_HPP_namespace HeadFirstDesignPatterns {namespace Visitor {namespace Menus {class MenuItem : public MenuComponent { private: std::string _name; private: std::string _description; private: double _price; protected: mutable std::list< Ingredient* > _ingredients; public: MenuItem( const std::string name, const std::string description, double price ) : _name( name ), _description( description ), _price( price ) { } public: void accept( Visitor* visitor ) { assert( visitor ); visitor->visit( this ); std::list< Ingredient* >::const_iterator iterator = _ingredients.begin(); while( iterator != _ingredients.end() ) { ( *iterator )->accept( visitor ); ++iterator; } } public: void add( Ingredient* ingredient ) { assert( ingredient ); _ingredients.push_back( ingredient ); } public: double getPrice() const { return _price; } public: float getHealthRating() const { float result = 0.0f; std::list< Ingredient* >::const_iterator iterator = _ingredients.begin(); while( iterator != _ingredients.end() ) { result += ( *iterator )->getHealthRating(); ++iterator; } return result; } public: bool isVegetarian() const { bool result = true; std::list< Ingredient* >::const_iterator iterator = _ingredients.begin(); while( iterator != _ingredients.end() && true == result ) { result = ( *iterator )->isVegetarian(); ++iterator; } return result; } public: std::string toString() const { std::stringstream result; result << _name; if ( true == isVegetarian() ) { result << " (v)"; } result << " $" << getPrice(); result << "\t"; result << _description; //std::list< std::pair < Ingredient*, float > >::const_iterator iterator = _ingredients.begin(); //while( iterator != _ingredients.end() ) { // result << "\t"; // result << ( *iterator ).first->toString(); // result << " x " << ( *iterator ).second; // ++iterator; //} return result.str(); }};} // namespace Menus} // namespace Visitor} // namespace HeadFirstDesignPatterns#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?