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 Forma deve ter CalcularArea como virtual.
  • As classes Retangulo e Circulo devem herdar de Forma e usar override.
  • 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

  1. A classe Forma define CalcularArea como virtual e retorna 0 por padrão. Isso permite que classes derivadas possam sobrescrever o comportamento.
  2. Retangulo herda de Forma e sobrescreve CalcularArea com a fórmula base × altura.
  3. Circulo também herda e sobrescreve usando Math.PI * Raio * Raio.
  4. No Main, criamos um array de Forma contendo um retângulo e um círculo, demonstrando polimorfismo.
  5. Chamamos CalcularArea() em cada elemento; o método executado é o da classe real do objeto.
  6. Formatamos a saída com :F2 para 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 virtual na classe base: o método não pode ser sobrescrito. Exemplo: public double CalcularArea() => 0; causa erro de compilação se tentar override.
  • Não usar override na classe derivada: o compilador emite aviso e o método da base é escondido, não sobrescrito.
  • Confundir Math.PI com uma constante inexistente: use Math.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