Source of vehicle_vnv.hpp


  1: /** @file vehicle_vnv.hpp

  2: Illustrates both virtual and non-virtual inheritance.

  3: Based on an example from N. Josuttis, Object-Oriented Programming in C++.

  4: */
  5: 
  6: namespace Josuttis
  7: {
  8:     class VehicleVirtual
  9:     {
 10:     protected:
 11:         int yearOfManufacture;
 12:     };
 13: 
 14:     class VehicleNonVirtual : virtual public VehicleVirtual
 15:     {
 16:     protected:
 17:         int maxSpeed;
 18:     };
 19: 
 20:     class Car  : public VehicleNonVirtual { };
 21:     class Boat : public VehicleNonVirtual { };
 22:     class Amphibian : public Car, public Boat
 23:     {
 24:     public:
 25:         void setAndShowInfo()
 26:         {
 27:             //Note: maxSpeed without a class qualifier is ambiguous.

 28: 
 29:             Car::maxSpeed = 100;
 30:             cout << "\nMaximum land speed .................. "
 31:                 << Car::maxSpeed;
 32:             Boat::maxSpeed = 70;
 33:             cout << "\nMaximum water speed ................. "
 34:                 << Boat::maxSpeed;
 35:             cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
 36: 
 37:             VehicleNonVirtual::maxSpeed = 300;
 38:             cout << "\nMaximum non-virtual vehicle speed ... "
 39:                 << VehicleNonVirtual::maxSpeed;
 40:             cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
 41: 
 42:             cout << "\nMaximum land speed .................. "
 43:                 << Car::maxSpeed;
 44:             cout << "\nMaximum water speed ................. "
 45:                 << Boat::maxSpeed;
 46:             cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
 47: 
 48:             yearOfManufacture = 1995;
 49:             cout << "\nYear of non-virtual vehicle manufacture ... "
 50:                 << VehicleNonVirtual::yearOfManufacture;
 51:             cout << "\nYear of virtual vehicle manufacture ....... "
 52:                 << VehicleVirtual::yearOfManufacture;
 53:             cout << "\nYear of boat manufacture .................. "
 54:                 << Boat::yearOfManufacture;
 55:             cout << "\nYear of car manufacture ................... "
 56:                 << Car::yearOfManufacture;
 57:             cout << "\nYear of manufacture ... ................... "
 58:                 << yearOfManufacture;
 59:             cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
 60:         }
 61:     };
 62: }