#include <iostream.h>
class Caja {
    double longitud, anchura, altura;
    Caja *otraCaja;
public:
   Caja(double dim1, double dim2, double dim3);             //Constructor
   double volumen(void);
   void point_at_next(Caja *where_to_point);
   Caja *get_next(void);
};
Caja::Caja(double dim1, double dim2, double dim3)        //Constructor implementation
{
   longitud = dim1;
   anchura = dim2;
   altura = dim3;
   otraCaja = NULL;
}
double Caja::volumen(void)
{
   return (longitud * anchura * altura);
}
// This method causes the pointer to point to the input parameter
void Caja::point_at_next(Caja *where_to_point)
{
   otraCaja = where_to_point;
}
// This method returns the box the current one points to
Caja *Caja::get_next(void)
{
   return otraCaja;
}
main()
{
Caja peque&ntidle;a(5, 4, 10), mediana (10, 6, 20), grande(20, 10, 30);
         
Caja *CajaPointer;                      
   
   cout << "El volumen de la Caja pequeña es " << pequeña.volumen() << "\n";
   cout << "El volumen de la Caja mediana es " << mediana.volumen() << "\n";
   cout << "El volumen de la Caja grande es" << grande.volumen() << "\n";
   pequeña.point_at_next(&mediana);
   mediana.point_at_next(&grande);
   CajaPointer = &pequeña;
   CajaPointer = CajaPointer->get_next();
   cout << "La Caja apuntada tiene volumen = " <<
                                  CajaPointer->volumen() << "\n";
}
El resultado de la ejecución será :
El volumen de la Caja pequeña es 200 El volumen de la Caja mediana es 1200 El volumen de la Caja grande es 6000 La Caja apuntada tiene volumen = 1200
En este programa: