class VehicleVirtual
class VehicleNonVirtual
class Car
class Boat
class Amphibian
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: }