// ========================================================================== // $Id: vehicle.cpp,v 1.4 2008/10/15 21:27:22 jlang Exp $ // CSI2372 example Code for lecture 6 // ========================================================================== // (C)opyright: // // Jochen Lang // SITE, University of Ottawa // 800 King Edward Ave. // Ottawa, On., K1N 6N5 // Canada. // http://www.site.uottawa.ca // // Creator: jlang (Jochen Lang) // Email: jlang@site.uottawa.ca // ========================================================================== // $Log: vehicle.cpp,v $ // Revision 1.4 2008/10/15 21:27:22 jlang // Reverting to 1.2 // // Revision 1.2 2006/10/12 13:21:31 jlang // Renoved extra CRs // // Revision 1.1 2006/10/05 01:56:46 jlang // Added material for lecture 6 // // // ========================================================================== #include #include class Chassis { float d_length; }; class Engine { float d_horsePower; public: Engine( double _horsePower=50.0 ); double getHorsePower() const; }; class Wheel { float d_diameter; }; class Starter { std::string d_manufacturer; public: Starter( const std::string& _manufacturer ); }; class Battery { float d_voltage; }; class Vehicle { Chassis d_chassis; Engine d_engine; Wheel d_wheels[4]; Starter* d_start; Battery d_battery; public: Vehicle(const Chassis& _chassis, const Engine& _engine ); ~Vehicle(); Engine getEngineA(); const Engine& getEngineB(); const Engine* getEngineC(); }; Engine::Engine( double _horsePower ) : d_horsePower( _horsePower ) { } double Engine::getHorsePower() const { return d_horsePower; } Starter::Starter(const std::string& _manufacturer) : d_manufacturer(_manufacturer) { } Vehicle::Vehicle( const Chassis& _chassis, const Engine& _engine ) : d_engine( _engine ), d_chassis( _chassis ), d_start(0) { if ( d_engine.getHorsePower() < 100 ) { d_start = new Starter( "Mini" ); } else { d_start = new Starter( "Bosch" ); } } Vehicle::~Vehicle() { if (d_start != 0) { delete d_start; } } Engine Vehicle::getEngineA() { return d_engine; } const Engine& Vehicle::getEngineB() { return d_engine; } const Engine* Vehicle::getEngineC() { return &d_engine; } int main() { // External Aggregation Engine eng; Chassis chas; // Pass by reference Vehicle car( chas, eng ); std::cout << "A) Car has " << car.getEngineA().getHorsePower() << " hp" << std::endl; std::cout << "B) Car has " << car.getEngineB().getHorsePower() << " hp" << std::endl; std::cout << "C) Car has " << car.getEngineC()->getHorsePower() << " hp" << std::endl; return 0; }