Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Practicing Polymorphism | OOP Principles
course content

Зміст курсу

C# Beyond Basics

Practicing PolymorphismPracticing Polymorphism

The program given below contains a superclass called Shape and three derived classes called Rectangle, Square and Circle. The problem with the code is that the methods are not properly overridden since the output shows 0.0 for all the three Console.WriteLine statements which implies that the methods of the base class are being executed instead of the derived class' methods.

Edit the code in such a way that the two methods, namely getArea and calculatePerimeter are correctly overridden.

cs

index.cs

1. In the base class, use the virtual keyword to make the methods overridable.
2. In every derived class, add the override keyword in the method definitions.

using System;
using System.Collections.Generic;

class Shape
{
    // Perimeter is the length of the 'outline' of a shape
    public float perimeter;

    // Change code below this line
    public virtual float getArea()
    {
        return 0.0f;
    }

    protected virtual float calculatePerimeter()
    {
        return 0.0f;
    }
    // Change code above this line
}

class Rectangle : Shape
{
    float width;
    float height;

    public Rectangle(float width, float height)
    {
        this.width = width;
        this.height = height;
        this.perimeter = this.calculatePerimeter();
    }

    // Change code below this line
    public override float getArea()
    {
        return width * height;
    }

    protected override float calculatePerimeter()
    {
        return width * 2 + height * 2;
    }
    // Change code above this line
}

class Square : Shape
{
    float length;

    public Square(float length)
    {
        this.length = length * length;
        this.perimeter = calculatePerimeter();
    }

    // Change code below this line
    public override float getArea()
    {
        return length * length;
    }

    protected override float calculatePerimeter()
    {
        return 4 * length;
    }
    // Change code above this line
}

class Circle : Shape
{
    float radius;

    public Circle(float radius)
    {
        this.radius = radius;
        this.perimeter = calculatePerimeter();
    }

    // Change code below this line
    public override float getArea()
    {
        return 3.14f * radius * radius;
    }

    protected override float calculatePerimeter()
    {
        return 2.00f * 3.14f * radius;
    }
    // Change code above this line
}

class ConsoleApp
{
    static void Main()
    {
        List<Shape> shapes = new List<Shape>();
        shapes.Add(new Rectangle(10f, 20f));
        shapes.Add(new Square(10f));
        shapes.Add(new Circle(10f));

        foreach (Shape shape in shapes)
        {
            Console.WriteLine(shape.getArea());
        }
    }
}
    

Все було зрозуміло?

Секція 5. Розділ 5
course content

Зміст курсу

C# Beyond Basics

Practicing PolymorphismPracticing Polymorphism

The program given below contains a superclass called Shape and three derived classes called Rectangle, Square and Circle. The problem with the code is that the methods are not properly overridden since the output shows 0.0 for all the three Console.WriteLine statements which implies that the methods of the base class are being executed instead of the derived class' methods.

Edit the code in such a way that the two methods, namely getArea and calculatePerimeter are correctly overridden.

cs

index.cs

1. In the base class, use the virtual keyword to make the methods overridable.
2. In every derived class, add the override keyword in the method definitions.

using System;
using System.Collections.Generic;

class Shape
{
    // Perimeter is the length of the 'outline' of a shape
    public float perimeter;

    // Change code below this line
    public virtual float getArea()
    {
        return 0.0f;
    }

    protected virtual float calculatePerimeter()
    {
        return 0.0f;
    }
    // Change code above this line
}

class Rectangle : Shape
{
    float width;
    float height;

    public Rectangle(float width, float height)
    {
        this.width = width;
        this.height = height;
        this.perimeter = this.calculatePerimeter();
    }

    // Change code below this line
    public override float getArea()
    {
        return width * height;
    }

    protected override float calculatePerimeter()
    {
        return width * 2 + height * 2;
    }
    // Change code above this line
}

class Square : Shape
{
    float length;

    public Square(float length)
    {
        this.length = length * length;
        this.perimeter = calculatePerimeter();
    }

    // Change code below this line
    public override float getArea()
    {
        return length * length;
    }

    protected override float calculatePerimeter()
    {
        return 4 * length;
    }
    // Change code above this line
}

class Circle : Shape
{
    float radius;

    public Circle(float radius)
    {
        this.radius = radius;
        this.perimeter = calculatePerimeter();
    }

    // Change code below this line
    public override float getArea()
    {
        return 3.14f * radius * radius;
    }

    protected override float calculatePerimeter()
    {
        return 2.00f * 3.14f * radius;
    }
    // Change code above this line
}

class ConsoleApp
{
    static void Main()
    {
        List<Shape> shapes = new List<Shape>();
        shapes.Add(new Rectangle(10f, 20f));
        shapes.Add(new Square(10f));
        shapes.Add(new Circle(10f));

        foreach (Shape shape in shapes)
        {
            Console.WriteLine(shape.getArea());
        }
    }
}
    

Все було зрозуміло?

Секція 5. Розділ 5
some-alt