#include <iostream>
#include <vector>
using namespace std;
using namespace std;
namespace oss{
class Vehicle
{
public:
virtual string type() = 0;
virtual unsigned passengers() = 0;
virtual ~Vehicle();
};
class Land_vehicle : public Vehicle{
protected:
string typeOfVehicle;
unsigned numberOfPassengers;
public:
Land_vehicle();
string type();
};
class Bike : public Land_vehicle{
public:
Bike();
unsigned passengers();
};
class Counter {
int totalPassengers;
public:
Counter();
void add(Bike* b);
// void add(Car* c);
// void add(Catamaran* ca);
// void add(Seaplane* s);
// void add(Ferry* f);
int total();
};
}
using namespace oss;
Vehicle::~Vehicle(){};
Land_vehicle::Land_vehicle(){typeOfVehicle = "Land";}
string Land_vehicle::type(){return typeOfVehicle;}
Bike::Bike(){numberOfPassengers = 1;}
unsigned Bike::passengers(){return numberOfPassengers;}
Counter::Counter(){totalPassengers = 0;}
void Counter::add(Bike* b){
cout <<"inside add bike"<<endl;
totalPassengers += b->passengers();
}
//void Counter::add(Car c){totalPassengers += c.passengers();}
//void Counter::add(Catamaran ca){totalPassengers += ca.passengers();}
//void Counter::add(Seaplane s){totalPassengers += s.passengers();}
//void Counter::add(Ferry f){totalPassengers += f.passengers();}
int Counter::total(){return totalPassengers;}
int main() {
Counter c;
Vehicle* v[] = {new Bike};
size_t sz = sizeof v/sizeof v[0];
for (unsigned i = 0; i < sz; ++i) {
if (dynamic_cast<Bike*>(v[i]))
c.add(dynamic_cast<Bike*>(v[i]));
}
std::cout << "Total: " << c.total() << " passengers!" << std::endl;
for (unsigned i = 0; i < sz; ++i)
delete v[i];
return 0;
}