Fácil C#
Formas geométricas
Enunciado
Crie uma classe base Forma com um método virtual double CalcularArea() que retorna 0. Depois, crie as classes Retangulo e Circulo que herdam de Forma e sobrescrevem CalcularArea com as fórmulas corretas. No Main, crie um array de Forma com um retângulo e um círculo e exiba a área de cada um.
Requisitos
- A classe
Formadeve terCalcularAreacomovirtual. - As classes
RetanguloeCirculodevem herdar deFormae usaroverride. - O programa deve exibir as áreas com duas casas decimais.
Código inicial
using System;
class Forma
{
// TODO: declarar método virtual CalcularArea
}
class Retangulo : Forma
{
public double Base { get; set; }
public double Altura { get; set; }
// TODO: sobrescrever CalcularArea
}
class Circulo : Forma
{
public double Raio { get; set; }
// TODO: sobrescrever CalcularArea
}
class Program
{
static void Main()
{
// TODO: criar array de Forma e exibir áreas
}
}
Saída esperada
Área do retângulo: 12,00
Área do círculo: 28,27
Ver dica
Use Math.PI para o valor de π e Math.Round ou formatação F2 para duas casas decimais.
Mostrar solução
using System;
class Forma
{
// Método virtual: pode ser sobrescrito, mas tem implementação padrão
public virtual double CalcularArea() => 0;
}
class Retangulo : Forma
{
public double Base { get; set; }
public double Altura { get; set; }
public override double CalcularArea() => Base * Altura;
}
class Circulo : Forma
{
public double Raio { get; set; }
public override double CalcularArea() => Math.PI * Raio * Raio;
}
class Program
{
static void Main()
{
Forma[] formas = {
new Retangulo { Base = 3, Altura = 4 },
new Circulo { Raio = 3 }
};
Console.WriteLine($"Área do retângulo: {formas[0].CalcularArea():F2}");
Console.WriteLine($"Área do círculo: {formas[1].CalcularArea():F2}");
}
}
Passo a passo
- A classe
FormadefineCalcularAreacomovirtuale retorna 0 por padrão. Isso permite que classes derivadas possam sobrescrever o comportamento. Retanguloherda deFormae sobrescreveCalcularAreacom a fórmula base × altura.Circulotambém herda e sobrescreve usandoMath.PI * Raio * Raio.- No
Main, criamos um array deFormacontendo um retângulo e um círculo, demonstrando polimorfismo. - Chamamos
CalcularArea()em cada elemento; o método executado é o da classe real do objeto. - Formatamos a saída com
:F2para exibir duas casas decimais.
Por que funciona
O polimorfismo permite que variáveis do tipo base (Forma) referenciem objetos de classes derivadas. Em tempo de execução, a chamada a CalcularArea é resolvida para a implementação correta. O uso de virtual e override é essencial para que esse mecanismo funcione.
Erros comuns
- Esquecer
virtualna classe base: o método não pode ser sobrescrito. Exemplo:public double CalcularArea() => 0;causa erro de compilação se tentaroverride. - Não usar
overridena classe derivada: o compilador emite aviso e o método da base é escondido, não sobrescrito. - Confundir
Math.PIcom uma constante inexistente: useMath.PI.
Outra forma de resolver
Poderia usar uma classe abstrata com método abstrato, forçando a implementação. Mas aqui virtual com padrão 0 é aceitável e mais simples para o exercício.
Saída esperada
Área do retângulo: 12,00
Área do círculo: 28,27