#include<iostream>
#include<string>
using namespace std;
//Material class
class Material
{
public :
Material( float ) ;
virtual float calcValue( ) const = 0 ;
protected :
float unit;
} ;
Material:: Material ( float value)
: unit( value)
{ }
float Material:: calcValue ( ) const
{
return unit;
}
class Weight: public Material
{
public :
Weight( float ) ;
float calcValue( ) const ;
} ;
Weight:: Weight ( float value)
: Material( value) { }
float Weight:: calcValue ( ) const
{
float val,del,total,baseCharge= 100.0 ;
if ( unit> 1000 )
{
val= unit/ 1000 ;
del= baseCharge+ val* 10 ;
}
total= unit* .50 + del;
return total;
}
class Volume: public Material
{
public :
Volume( float ) ;
float calcValue( ) const ;
} ;
Volume:: Volume ( float value) : Material( value)
{
}
float Volume:: calcValue ( ) const
{
return unit * .75 ;
}
class Quantity: public Material
{
public :
Quantity( float ) ;
float calcValue( ) const ;
} ;
Quantity:: Quantity ( float value)
: Material( value) { }
float Quantity:: calcValue ( ) const
{
if ( unit >= 1 && unit <= 10 )
{
return unit * 3.00 ;
}
if ( unit >= 11 && unit <= 50 )
{
return unit * 2.50 ;
}
if ( unit >= 51 )
{
return unit * 2.00 ;
}
}
void printTotal( ostream & os, Material & val)
{
os<< "total: " << val.calcValue ( ) << endl;
}
int main( void )
{
Weight w1( 2345.00 ) ;
Volume v1( 6550.00 ) ;
Quantity q1( 343 ) ;
cout << "Cost of item with weight of 2345 lbs: " ;
printTotal( cout , w1) ;
cout << endl;
cout << "Cost of item with volume of 6550 cubic ft: " ;
printTotal( cout , v1) ;
cout << endl;
cout << "Cost of item with quantity of 343: " ;
printTotal( cout , q1) ;
cout << endl;
system ( "PAUSE" ) ;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vTWF0ZXJpYWwgY2xhc3MKY2xhc3MgTWF0ZXJpYWwKewpwdWJsaWM6CiAgICBNYXRlcmlhbChmbG9hdCk7CiAgICB2aXJ0dWFsIGZsb2F0IGNhbGNWYWx1ZSgpIGNvbnN0ID0gMDsKcHJvdGVjdGVkOgogICAgZmxvYXQgdW5pdDsKfTsKTWF0ZXJpYWw6Ok1hdGVyaWFsKGZsb2F0IHZhbHVlKQo6dW5pdCh2YWx1ZSkKe30KZmxvYXQgTWF0ZXJpYWw6OiBjYWxjVmFsdWUoKSBjb25zdAp7CiAgICByZXR1cm4gdW5pdDsKfQoKY2xhc3MgV2VpZ2h0OnB1YmxpYyBNYXRlcmlhbAp7CnB1YmxpYzoKICAgIFdlaWdodChmbG9hdCk7CiAgICBmbG9hdCBjYWxjVmFsdWUoKSBjb25zdDsKfTsKCldlaWdodDo6V2VpZ2h0KGZsb2F0IHZhbHVlKQo6TWF0ZXJpYWwodmFsdWUpe30KCmZsb2F0IFdlaWdodDo6Y2FsY1ZhbHVlKCkgY29uc3QKewogICAgCiAgICBmbG9hdCB2YWwsZGVsLHRvdGFsLGJhc2VDaGFyZ2U9MTAwLjA7CiAgICBpZih1bml0PjEwMDApCiAgICB7CiAgICAgICAgdmFsPXVuaXQvMTAwMDsKICAgICAgICBkZWw9YmFzZUNoYXJnZSt2YWwqMTA7CiAgICB9CiAgICB0b3RhbD11bml0Ki41MCtkZWw7CiAgICByZXR1cm4gdG90YWw7Cn0KCmNsYXNzIFZvbHVtZTpwdWJsaWMgTWF0ZXJpYWwKewpwdWJsaWM6CiAgICBWb2x1bWUoZmxvYXQpOwogICAgZmxvYXQgY2FsY1ZhbHVlKCkgY29uc3Q7Cn07CgpWb2x1bWU6OlZvbHVtZShmbG9hdCB2YWx1ZSk6TWF0ZXJpYWwodmFsdWUpCnsKfQoKZmxvYXQgVm9sdW1lOjpjYWxjVmFsdWUoKSBjb25zdAp7CiAgICByZXR1cm4gdW5pdCAqIC43NTsKfQoKY2xhc3MgUXVhbnRpdHk6cHVibGljIE1hdGVyaWFsCnsKcHVibGljOgogICAgUXVhbnRpdHkoZmxvYXQpOwogICAgZmxvYXQgY2FsY1ZhbHVlKCkgY29uc3Q7Cn07CgpRdWFudGl0eTo6UXVhbnRpdHkoZmxvYXQgdmFsdWUpCjpNYXRlcmlhbCh2YWx1ZSl7fQoKZmxvYXQgUXVhbnRpdHk6OmNhbGNWYWx1ZSgpIGNvbnN0CnsKICAgIGlmICh1bml0ID49IDEgJiYgdW5pdCA8PSAxMCkKICAgIHsKICAgICAgICByZXR1cm4gdW5pdCAqIDMuMDA7CiAgICB9CiAgICAKICAgIGlmICh1bml0ID49IDExICYmIHVuaXQgPD0gNTApCiAgICB7CiAgICAgICAgcmV0dXJuIHVuaXQgKiAyLjUwOwogICAgfQogICAgCiAgICBpZiAodW5pdCA+PSA1MSkKICAgIHsKICAgICAgICByZXR1cm4gdW5pdCAqIDIuMDA7CiAgICB9Cn0KCnZvaWQgcHJpbnRUb3RhbChvc3RyZWFtICZvcywgTWF0ZXJpYWwgJnZhbCkKewogICAgb3M8PCJ0b3RhbDogIjw8dmFsLmNhbGNWYWx1ZSgpPDxlbmRsOwogICAgCn0KCmludCBtYWluKHZvaWQpCnsKICAgIFdlaWdodCB3MSgyMzQ1LjAwKTsKICAgIFZvbHVtZSB2MSg2NTUwLjAwKTsKICAgIFF1YW50aXR5IHExKDM0Myk7CiAgICAKICAgIGNvdXQ8PCJDb3N0IG9mIGl0ZW0gd2l0aCB3ZWlnaHQgb2YgMjM0NSBsYnM6ICI7CiAgICBwcmludFRvdGFsKGNvdXQsIHcxKTsKICAgIGNvdXQ8PGVuZGw7CiAgICBjb3V0PDwiQ29zdCBvZiBpdGVtIHdpdGggdm9sdW1lIG9mIDY1NTAgY3ViaWMgZnQ6ICI7CiAgICBwcmludFRvdGFsKGNvdXQsIHYxKTsKICAgIGNvdXQ8PGVuZGw7CiAgICBjb3V0PDwiQ29zdCBvZiBpdGVtIHdpdGggcXVhbnRpdHkgb2YgMzQzOiAiOwogICAgcHJpbnRUb3RhbChjb3V0LCBxMSk7CiAgICBjb3V0PDxlbmRsOwogICAgc3lzdGVtKCJQQVVTRSIpOwp9