1: /** @file test_amphibian.cpp
2: Based on an example from N. Josuttis, Object-Oriented Programming in C++.
3: */
5: #include <iostream>
6: using namespace std;
8: #include "amphibian.h"
9: using Josuttis::Car;
10: using Josuttis::Boat;
11: using Josuttis::Amphibian;
13: int main()
14: {
15: Car car(10);
16: car.display();
17: car.travel(5);
18: car.display();
19: Boat boat(30);
20: boat.display();
21: boat.travel(6);
22: boat.display();
23: Amphibian amphibian(7, 42); //7 kilometers and 42 sea miles.
24: amphibian.display(); //Output distance traveled
26: //The following code segment will not compile. Why not?
27: //amphibian.travel(50);
28: //amphibian.display();
29: //We can, however, do the following:
30: amphibian.Car::travel(50);
31: amphibian.display();
32: amphibian.Boat::travel(25);
33: amphibian.display();
35: //We can also create a new car or a new boat from an amphibian.
36: Car newCar(amphibian);
37: newCar.travel(22);
38: newCar.display();
39: amphibian.display();
40: Boat newBoat(amphibian);
41: newBoat.travel(22);
42: newBoat.display();
43: amphibian.display();
45: Car& newCar2(amphibian); //(or Car& newCar2 = amphibian;)
46: newCar2.travel(22);
47: newCar2.display();
48: amphibian.display();
49: Boat& newBoat2(amphibian); //(or Boat& newBoat2 = amphibian;)
50: newBoat2.travel(12);
51: newBoat2.display();
52: amphibian.display();
54: Amphibian* amphibianPtr = &hibian;
55: Car* carPtr = &hibian;
56: carPtr->travel(33);
57: carPtr->display();
58: amphibianPtr->display();
59: Boat* boatPtr = &hibian;
60: boatPtr->travel(33);
61: boatPtr->display();
62: amphibianPtr->display();
63: }