Vehicle load
Check the below code
#include<iostream>
class Vehicle {
  public:
    Vehicle();
    void setNext(Vehicle* next);
    virtual void load();
  protected:
    Vehicle* next_;
};
class Pickup : public Vehicle {
  public:
    void load() override; 
};
class SUV : public Vehicle {
  public:
//    void load() override;
};
class Car : public Vehicle {
  public:
 //   void load() override; 
};
Vehicle::Vehicle(): next_(NULL) {}
void Vehicle::setNext(Vehicle* next) {
  next_ = next;
}
void Vehicle::load()
{
  std::cout << "Vehicle finding next one to load" << std::endl;
  return next_->load();
}
void Pickup::load()
{
  std::cout << "Pickup load" << std::endl;
  return;
}
int main() {
  Vehicle* v1 = new Car();
  Vehicle* v2 = new SUV();
  Vehicle* v3 = new Pickup(); 
  v1->setNext(v2);
  v2->setNext(v3);
  v1->load();
}
The output is
Vehicle finding next one to load
Vehicle finding next one to load
Pickup load