Una alternativa es que definas en la clase base un metodo virtual que se llame mostrar() o algo asi, y que todas las clases derivadas implementan, y con ello evitas tener que saber el tipo, solo dices vehiculo->mostrar(), y ya.
Puedes evitar loa primeros ifs si guardas todos los dias en un arreglo de strings (suponiendo que lo llamas dias) y despues de comprobar que El caracter esta entre '0' y '9' imprimes
Puedes acortar tu programa aprovechando que Las letras son contiguas. Una vez que has detectado que la letra esta entre 'a' y 'g', puedes ver que numero tiene asociado haciendo una operacion:
caracter - 'a' + 1
Esto te da El valor que estas imprimiendo y evitas todos los ifs.
Transforma la letra a minuscula (usando tolower()) para no tener que hacer logica adicional para Las mayusculas.
Visita cada una de las lineas con 2 numeros (exceptuando la primera), usando un hash, usando el primero como key y el segundo como valor.
Luego visita las lineas con solo 1 numero y preguntas al hash si el numero es parte de las keys, si lo es, muestras el valor, si no es, muestras el caso de error.
La primera linea de la entrada te indica cuantos pares clave-valor hay y cuantas lineas con numeros vienen a continuacion.
Para complementar la excelente respuesta de Loretz, los nombres de las funciones funcionan como punteros inicializados y cuyo contenido es la direccion de memoria de esa funcion, por lo que el uso del & es opcional.