#include <iostream>
#include <string>
using namespace std;

class Coche
{
  // Atributos
  private:
    string color;
    string marca;
    string modelo;
    int marcha;

  // Métodos
  public:
    Coche()
    {
      color = "color desconocido";
      marca = "marca desconocida";
      modelo = "modelo desconocido";
      marcha = 0;
    }

    string obtenerColor()
    {
      return color;
    }
    
    void asignarColor(string col)
    {
      if (col.length() == 0)
        color = "color desconocido";
      else
        color = col;
    }

    string obtenerMarca()
    {
      return marca;
    }
    
    void asignarMarca(string mar)
    {
      if (mar.length() == 0)
        marca = "marca desconocida";
      else
        marca = mar;
    }
    
    string obtenerModelo()
    {
      return modelo;
    }
    
    void asignarModelo(string tip)
    {
      if (tip.length() == 0)
        modelo = "modelo desconocido";
      else
        modelo = tip;
    }
    
    void ArrancarMotor()
    {
      cout << "\nBRrrrrrrrrummmmm...\n";
    }
  
    void Acelerar()
    {
      cout << "Acelerando...\n";
    }
  
    void SubirMarcha()
    {
      if (marcha < 5) marcha++;
      cout << "Marcha: " << marcha << endl;
    }
  
    void BajarMarcha()
    {
      if (marcha > 0) marcha--;
      cout << "Marcha: " << marcha << endl;
    }
  
    void Frenar()
    {
      cout << "Frenando...\n";
    }
  
    void PararMotor()
    {
      cout << "\nMotor parado.\n";
    }
  
    void DescribirCoche()
    {
      cout << "\n  -- Mi coche es un " << marca << " " << color << " " << modelo << endl;
    } 
};

int main()
{
  Coche micoche;
  micoche.asignarMarca("BMW");
  micoche.asignarColor("azul metalizado");
  micoche.asignarModelo("descapotable");
  micoche.ArrancarMotor();
  micoche.Acelerar();
  micoche.SubirMarcha();
  micoche.Acelerar();
  micoche.SubirMarcha();
  micoche.Acelerar();
  micoche.SubirMarcha();      
  micoche.Frenar();
  micoche.BajarMarcha();
  micoche.Frenar();
  micoche.BajarMarcha();
  micoche.Frenar();
  micoche.BajarMarcha();
  micoche.PararMotor();
  micoche.DescribirCoche();
}

