//---------------------.h----------------------- class Company { public: virtual float sale_price(float money) = 0; }; //实价 class NormalPrice : public Company { public: float sale_price(float money); }; //商场打折 class DiscountPrice : public Company { public: DiscountPrice( float discount ); float sale_price(float money); private: float m_discount; }; //满多少送多少 class CutPrice : public Company { public: CutPrice( float over_money, float give_money ); float sale_price(float money); private: float m_over_money; float m_give_money; }; class Strategy { public: Strategy(int type); ~Strategy(); float get_price(float money); private: Company * m_pCompany; }; //---------------------.cpp-------------------------- #include <iostream> #include "strategy.h" using namespace std; float NormalPrice::sale_price( float money ) { return money; } DiscountPrice::DiscountPrice( float discount ) : m_discount( discount ) { } float DiscountPrice::sale_price( float money ) { return m_discount * money; } CutPrice::CutPrice( float over_money, float give_money ) : m_over_money( over_money ), m_give_money( give_money ) { } float CutPrice::sale_price( float money ) { int n = (int)money / (int)m_over_money; if( n < 1 ) { return money; } else { return money - n * m_give_money ; } } Strategy::Strategy( int type ) { switch( type ) { case 1: m_pCompany = new NormalPrice(); break; case 2: m_pCompany = new DiscountPrice(0.9); break; case 3: m_pCompany = new CutPrice( 400.0,100.0 ); break; default: m_pCompany = NULL; } } Strategy::~Strategy() { if( m_pCompany != NULL ) { delete m_pCompany; } } float Strategy::get_price(float money) { return m_pCompany->sale_price(money); } int main( int argc, char **argv ) { float money; int type; cout << "Please enter the should-be price: "; cin >> money; cout << "Please enter the Discount-TYPE:"; cin >> type; Strategy strategy(type); cout << "The Price IS: " << strategy.get_price( money ); return 0; }