#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!
#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();
}
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
Motorcom um método públicoligar()que contémcout << "Motor ligado!" << endl;. - Há uma classe
Carroque tem um membro privadoMotor motor;e um método públicoligarCarro()que chamamotor.ligar();. - Em
main()é criado um objetoCarro c;e depois é chamadoc.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!". endlinsere 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, quandoligar()é executado, ele escreve exatamente o textoMotor 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 objetoCarro(e, por composição, constrói também oMotormembro).c.ligarCarro();chama o métodoligarCarro()desse objetoc.- Dentro de
ligarCarro()ocorremotor.ligar();. motor.ligar()executacout << "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
coutque 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 exatamenteMotor ligado!.
Resposta
b) Motor ligado!