// Movie.cpp #include "Movie.hh" #include <stdexcept> #include "RegularPrice.hh" #include "ChildrensPrice.hh" #include "NewReleasePrice.hh" const int Movie::CHILDRENS; const int Movie::REGULAR; const int Movie::NEW_RELEASE; Movie::Movie( const std::string& title, int priceCode ): _title( title ), _price( 0) { setPriceCode( priceCode ); } Movie::Movie( const Movie& movie ): _title( movie._title ), _price( 0 ) { setPriceCode( movie.getPriceCode() ); } Movie& Movie::operator=( const Movie& rhs ) { if ( this == &rhs ) return *this; _title = rhs._title; setPriceCode( rhs.getPriceCode() ); return *this; } int Movie::getPriceCode() const { return _price->getPriceCode(); } void Movie::setPriceCode( int arg ) { delete _price; switch ( arg ) { case REGULAR: _price = new RegularPrice; break; case CHILDRENS: _price = new ChildrensPrice; break; case NEW_RELEASE: _price = new NewReleasePrice; break; default: throw std::invalid_argument("Incorrect Price Code"); } } double Movie::getCharge( int daysRented ) const { double result = 0; switch ( getPriceCode() ) { case Movie::REGULAR: result += 2; if ( daysRented > 2 ) result += ( daysRented - 2 ) * 1.5 ; break; case Movie::NEW_RELEASE: result += daysRented * 3; break; case Movie::CHILDRENS: result += 1.5; if ( daysRented > 3 ) result += ( daysRented - 3 ) * 1.5; break; } return result; } int Movie::getFrequentRenterPoints( int daysRented ) const { if ( ( getPriceCode() == Movie::NEW_RELEASE ) && daysRented > 1 ) return 2; else return 1; }