//File : LongA_final_cisp400.cpp //Author : Andre Long //Due : December 14, 2004 //Description : Implement a new class private aircraft that will compute tax for aircraft // using multiple inheritance and virtual functions #include using namespace std; class Transport { protected: int people; float weight, maxSpeed; public: Transport(int, float, float); virtual ~Transport(){ return;} virtual void setPeople(); virtual void setWeight(); virtual void setMaxSpeed(); virtual int getPeople(){ return people;} virtual float getWeight(){ return weight;} virtual float getMaxSpeed(){ return maxSpeed;} virtual void input(){ setPeople(), setWeight(), setMaxSpeed();} virtual void inputTransport()=0; virtual void output(); virtual void outputTaxes()=0; }; Transport::Transport( int MaxPeople, float MaxWeight, float MaxSpeed): people(MaxPeople), weight(MaxWeight), maxSpeed(MaxSpeed) { return; } void Transport::setPeople() { cout << "\nPlease enter number of people in your transport:\n"; cin >> people; return; } void Transport::setWeight() { cout << "\nPlease enter the weight in pounds of your transport:\n"; cin >> weight; return; } void Transport::setMaxSpeed() { cout <<"\nPlease enter the max speed in miles per hour of your transport:\n"; cin >> maxSpeed; return; } void Transport::output() { cout << "\nPeople in transport: " << getPeople(); cout << "\nWeight of transport: " << getWeight() << " pounds"; cout << "\nMax Speed: " << getMaxSpeed() << " Miles/Hour"; return; } class Vehicle : virtual public Transport { protected: int axles; float taxes; public: Vehicle(int, float, float, int, float); virtual ~Vehicle(){ return;} virtual void setAxles(); virtual void setTaxes(); virtual int getAxles(){ return axles;} virtual float getTaxes(){ return taxes;} virtual void input(){ setAxles(), setTaxes();} virtual void inputTransport(){ Transport::input(), setAxles(), setTaxes();} virtual void output(); virtual void outputTaxes(); }; Vehicle::Vehicle( int MaxPeople, float MaxWeight, float MaxSpeed, int MaxAxles, float MaxTaxes): Transport(MaxPeople, MaxWeight, MaxSpeed), axles(MaxAxles), taxes(MaxTaxes) { return; } void Vehicle::setAxles() { cout << "\nPlease enter the number of axles your motor vehicle has:\n"; cin >> axles; return; } void Vehicle::setTaxes() { taxes = (100 / axles) + (5*(people - 6)) + ((50*(weight-2000)) / 1000); return; } void Vehicle::output() { cout << "\nAxles: " << getAxles(); return; } void Vehicle::outputTaxes() { Transport::output(); output(); cout << "\nTaxes for Motor Vehicle: $" << getTaxes(); return; } class Vessel : virtual public Transport { protected: float foot, taxes; public: Vessel(int, float, float, float, float); virtual ~Vessel(){ return;} virtual void setFoot(); virtual void setTaxes(); virtual float getFoot(){return foot;} virtual float getTaxes(){ return taxes;} virtual void input(){ setFoot(), setTaxes();} virtual void inputTransport(){ Transport::input(), setFoot(), setTaxes();} virtual void output(); virtual void outputTaxes(); }; Vessel::Vessel( int MaxPeople, float MaxWeight, float MaxSpeed, float MaxFoot, float MaxTaxes): Transport(MaxPeople, MaxWeight, MaxSpeed), foot(MaxFoot), taxes(MaxTaxes) { return; } void Vessel::setFoot() { cout<<"\nPlease enter the length in foot of your vessel:\n"; cin >> foot; return; } void Vessel::setTaxes() { taxes = 10 * foot; return; } void Vessel::output() { cout << "\nLength of vessel: " << getFoot() << " ft"; return; } void Vessel::outputTaxes() { Transport::output(); output(); cout << "\nTaxes for vessel: $" << getTaxes(); return; } class Amphibious : public Vehicle, public Vessel { protected: float taxes; public: Amphibious(int, float, float, int, float, float, float); virtual ~Amphibious(){ return;} virtual void setTaxes(){ taxes = Vehicle::getTaxes() + Vessel::getTaxes();} virtual float getTaxes(){ return taxes;} virtual void input() {Vehicle::input(), Vessel::input(), setTaxes();} virtual void inputTransport() {Transport::input(), Vehicle::input(), Vessel::input(), setTaxes();} virtual void output() { Transport::output(), Vehicle::output(), Vessel::output();} virtual void outputTaxes(); }; Amphibious::Amphibious( int MaxPeople, float MaxWeight, float MaxSpeed, int MaxAxles, float MaxTaxes1, float MaxFoot, float MaxTaxes2): Vehicle(MaxPeople, MaxWeight, MaxSpeed, MaxAxles, MaxTaxes1), Vessel(MaxPeople, MaxWeight, MaxSpeed, MaxFoot, MaxTaxes2), Transport(MaxPeople, MaxWeight, MaxSpeed) { return; } void Amphibious::outputTaxes() { output(); cout << "\nTaxes for Amphibious: $" << getTaxes(); return; } class Aircraft: virtual public Transport { protected: int passengers; float wingSpan; float taxes; public: Aircraft(int occupants, float length, float tax, int MaxPeople, float MaxWeight, float MaxSpeed):Transport(MaxPeople, MaxWeight, MaxSpeed) { passengers=occupants; wingSpan=length; taxes=tax; } virtual ~Aircraft() { } virtual setPassengers() { cout<<"How many passengers can ride on this aircraft? "; cin>>passengers; cout<>wingSpan; cout<> choice; return choice; } int main() { Transport *transport; int choice = 0; system("clear"); cout << "\nThis program calculate the license taxes for your vehicle"; choice = menu(); while(choice != 5) { switch(choice) { case 1: transport = new Vehicle( 0, 0, 0, 0, 0); transport->inputTransport(); transport->outputTaxes(); break; case 2: transport = new Vessel( 0, 0, 0, 0, 0); transport->inputTransport(); transport->outputTaxes(); break; case 3: transport = new Amphibious( 0, 0, 0, 0, 0, 0, 0); transport->inputTransport(); transport->outputTaxes(); break; case 4: transport = new Aircraft(0, 0, 0, 0, 0, 0); transport->inputTransport(); transport->outputTaxes(); break; default: cout << "\nThe number you entered was wrong, please try again!"; } cout << endl; choice = menu(); } delete transport; return 0; }