Pular para o conteúdo

Exército Brasileiro — Escola de Formação Complementar do Exército (EsFCEx) 2020

Questão 54 — Programação Orientada a Objetos: Polimorfismo

Programação Orientada a Objetos Polimorfismo

2020

Exército Brasileiro — Escola de Formação Complementar do Exército (EsFCEx) · Oficial do Quadro Complementar do Exército — Área: Informática · Caderno Versão A

Gabarito disponível

Considere a execução do código C++ a seguir:

#include <iostream>

class Animal {
public:
virtual void falar() = 0;
virtual ~Animal() = default;
};

class Gato final : public Animal {
public:
void falar(){
std::cout << "Miau\n";
}
};

class Cao final : public Animal {
public:
void falar(){
std::cout << "Auau\n";
}
};

int main(){
Animal *a;

a = new Gato;
a->falar();
delete a;

a = new Cao;
a->falar();
delete a;
}

Na programação orientada a objetos, a capacidade de a classe Animal se comportar de forma diferente em cada uma das invocações do método falar(), é chamada de:
Selecione uma alternativa

Resolução comentada

Mesma chamada a falar() produz comportamentos diferentes conforme o tipo real do objeto: polimorfismo.

Animal tem o método virtual puro falar(), e o ponteiro Animal* aponta primeiro para um Gato e depois para um Cao. A mesma chamada a->falar() executa implementações diferentes (Miau/Auau), escolhidas em tempo de execução pela ligação dinâmica. Isso é polimorfismo.

Análise das alternativas

A) Encapsulamento é ocultar dados e implementação, e não está em jogo aqui. B) Sobrecarga é o mesmo nome com assinaturas diferentes, o que não ocorre. C) Abstração é modelar o essencial; a classe abstrata a viabiliza, mas o comportamento variável é o polimorfismo. E) Herança é o mecanismo de reuso que permite o polimorfismo, não o comportamento descrito.

Referência: Programação orientada a objetos: polimorfismo por subtipo e funções virtuais em C++.

Resolução comentada do VaiConcursos.

Ver gabarito

Gabarito: D

Fonte: Gabarito preliminar: Gabarito — 008. Prova Objetiva — Informática — Versão A (página 22)