#include <iostream>
using namespace std;
class Motor {
public:
    void ligar() { cout << "Motor ligado!" << endl; }
};
class Carro {
private:
    Motor motor;
public:
    void ligarCarro() { motor.ligar(); }
};
int main() {
    Carro c;
    c.ligarCarro();
}
O que será exibido?
a) Nada.
b) Motor ligado!
c) Erro de compilação.
d) O programa trava.
e) Ligando carro!

Passo 1

O enunciado mostra um programa em C++ e pergunta “O que será exibido?” com alternativas (a) a (e). Informações relevantes dadas pelo enunciado:
  • Há uma classe Motor com um método público ligar() que contém cout << "Motor ligado!" << endl;.
  • Há uma classe Carro que tem um membro privado Motor motor; e um método público ligarCarro() que chama motor.ligar();.
  • Em main() é criado um objeto Carro c; e depois é chamado c.ligarCarro();.
  • As alternativas possíveis são: (a) Nada., (b) Motor ligado!, (c) Erro de compilação., (d) O programa trava., (e) Ligando carro!.

Passo 2

Entendendo o que faz Motor::ligar(): dentro de ligar() temos a chamada cout << "Motor ligado!" << endl;. Expliquei cada parte:
  • cout é o fluxo de saída padrão em C++ (normalmente a tela/terminal).
  • O operador << envia o que está à direita para esse fluxo; aqui envia a string literal "Motor ligado!".
  • endl insere um carácter de nova linha e força o esvaziamento (flush) do buffer de saída. Ou seja, além de pular linha, garante que a mensagem apareça imediatamente.
    Portanto, quando ligar() é executado, ele escreve exatamente o texto Motor ligado! seguido de uma nova linha no terminal.

Passo 3

Entendendo a composição entre as classes: a classe Carro tem um membro Motor motor;. Isso significa que cada Carro contém internamente um objeto Motor. O método Carro::ligarCarro() faz motor.ligar();, ou seja, delega a ação ao motor que está dentro do carro. Como motor é um membro (não um ponteiro), ele existe e está pronto para ser usado após a construção de Carro.

Passo 4

O fluxo de execução no main():
  • Carro c; constrói um objeto Carro (e, por composição, constrói também o Motor membro).
  • c.ligarCarro(); chama o método ligarCarro() desse objeto c.
  • Dentro de ligarCarro() ocorre motor.ligar();.
  • motor.ligar() executa cout << "Motor ligado!" << endl;, portanto escreve no terminal a string e uma nova linha.
    Não há nada no código que impeça essa sequência: os métodos são públicos quando necessário e as chamadas estão corretas.

Passo 5

Analisando as alternativas e descartando as incorretas:
  • (a) Nada. — incorreto, porque há uma chamada a cout que produz saída.
  • (c) Erro de compilação. — incorreto, o código é sintaticamente válido: classes, membros e chamadas estão corretas; não há referência a símbolos não declarados.
  • (d) O programa trava. — incorreto, não existem loops infinitos nem chamadas bloqueantes; o programa executa rapidamente e termina.
  • (e) Ligando carro! — incorreto, o literal impresso no código é "Motor ligado!", não "Ligando carro!".
    Logo, a alternativa que corresponde ao que o programa escreve é a que contém exatamente Motor ligado!.

Resposta

b) Motor ligado!

Exercícios relacionados