#include <cstdio>
#include <iostream>

class Motor {
   private:
      int status; // 1- andando, 2 - dando ré, 3 - parado
   public:
      void partida(void);
      void marchaRe(void);
      void parar(void);
      void mostraStatus(void);
};

class Pneu {
   private:
      int pressao;
   public:
      void setPressao(int cm3);
};

class Vidro {
   private:
      int status; // 1- vidro fechado, 2 - aberto
   public:
      void levantar(void);
      void abaixar(void);
      void mostraStatus(void);
};

class Porta {
   private:
      int status;    //1 - porta aberta, 2 - porta fechada
   public:
      Vidro janela;
      void abrir(void);
      void fechar(void);
      void mostraStatus(void);
};

class Carro {
   private:
      Motor motor;
      Pneu pneu[4];
      Porta esquerda, direita;
   public:
      Carro(void);
      void mostraStatus(void);
};

/***************************************************************
         Implementação da classe Motor
***************************************************************/
void Motor::partida(void){
     status = 1;          //carro esta andando
}

void Motor::marchaRe(void){
     status = 2;          //carro esta dando re
}

void Motor::parar(void){
     status = 3;          //carro esta parado
}

void Motor::mostraStatus(void){
     if (status == 1)
        cout << "Carro esta andando"<<"\n";
     else if (status == 2)
        cout << "Carro esta dando re"<<"\n";
     if (status == 3)
        cout << "Carro esta parado"<<"\n";
}
/***************************************************************
         Implementação da classe Pneu
***************************************************************/

void Pneu::setPressao(int cm3){
     pressao = cm3;
}

//Implementação da classe Vidro

void Vidro::mostraStatus(){
     if (status == 1)
        cout << "Vidro esta fechado"<<"\n";
     else if (status == 2)
        cout << "Vidro esta aberto"<<"\n";
}

void Vidro::levantar(){
    status = 1;       //vidro esta fechado
}

void Vidro::abaixar(){
    status = 2;       //vidro esta aberto
}

/***************************************************************
         Implementação da classe Porta
***************************************************************/

void Porta::abrir(){
     status = 1;
}

void Porta::fechar(){
     status = 2;
}

void Porta::mostraStatus(){
     if (status == 1)
        cout << "Porta esta aberta" <<"\n";
     else if (status == 2)
        cout << "Porta esta fechada"<<"\n";
//mostra status da janela/vidro da porta
     janela.mostraStatus();
}

/***************************************************************
         Implementação da classe Carro
***************************************************************/
Carro::Carro(){
   motor.parar();  //carro esta parado
   //inicializa a pressao dos 4 pneus
   pneu[0].setPressao(3);
   pneu[1].setPressao(3);
   pneu[2].setPressao(3);
   pneu[3].setPressao(3);
   //as portas estao fechadas
   esquerda.fechar();
   direita.fechar();
   //os vidros estao fechados
   direita.janela.levantar();
   esquerda.janela.abaixar();
}
void Carro::mostraStatus(){
    cout << "STATUS DO MOTOR:" << "\n";
    motor.mostraStatus();
    cout << "STATUS DA PORTA DIREITA:" << "\n";
    direita.mostraStatus();
    cout << "STATUS DA PORTA ESQUERDA:" << "\n";
    direita.mostraStatus();
}

int main() {
   Carro c;
   c.mostraStatus();
   getchar();

}


