Создать абстрактный базовый класс с виртуальной функцией - площадь - C#
Формулировка задачи:
Создать абстрактный базовый класс с виртуальной функцией - площадь. Создать производные классы: прямоугольник, КРУГ, прямоугольный треугольник, трапеция со своими функциями площади. Площадь прямоугольника S = ab (а b - стороны) площадь круга S = πr ^ 2 (r - радиус) площадь прямоугольного треугольника S = ab / 2 (а, b - катеты) площадь трапеции S = (a + b) h / 2 (а, b - основания трапеции, h - высота). Для проверки вызовов виртуальных функций определить массив указателей на абстрактный класс, которым присваиваются адреса объектов не абстрактных классов.
Что-то есть, чего-то нет:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PR9
{
class Baz
{
virtual double Ploshad(int a, int b);
}
class Pramougolnik : Baz
{
double a, b;
Pramougolnik(double a1 = 0, double b1 = 0)
{ a = a1; b = b1; }
virtual double Ploshad()
{
return a * b;
}
}
class Krug : Baz
{
double Pi = 3.14;
double r;
Krug(double R = 0)
{ r = R; }
virtual double Ploshad()
{
return Pi * r * r;
}
}
class Pramougolniy_treugolnik : Baz
{
double a, b;
Pramougolniy_treugolnik(double a1 = 0, double b1 = 0)
{ a = a1; b = b1; }
virtual double Ploshad()
{
return (a * b) / 2;
}
}
class Trapeciya : Baz
{
double a, b, h;
Trapeciya(double a1 = 0, double b1 = 0, double h1 = 0)
{ a = a1; b = b1; h = h1; }
virtual double Ploshad()
{
return (a + b) * h / 2;
}
}
class Program
{
static void Main(string[] args)
{
}
}
}Решение задачи: «Создать абстрактный базовый класс с виртуальной функцией - площадь»
textual
Листинг программы
abstract class Shape
{
public abstract double CalculateArea();
}
class Rectangle : Shape
{
public double Width { get; private set; }
public double Height { get; private set; }
public Rectangle(double width, double height)
{
Width = width;
Height = height;
}
public override double CalculateArea()
{
return Width * Height;
}
}
class Circle : Shape
{
public double Radius { get; private set; }
public Circle(double radius)
{
Radius = radius;
}
public override double CalculateArea()
{
return Math.PI * Radius * Radius;
}
}
class RightTriangle : Shape
{
public Tuple<double, double> Legs { get; private set; }
public RightTriangle(double a, double b)
{
Legs = new Tuple<double, double>(a, b);
}
public override double CalculateArea()
{
return Legs.Item1 * Legs.Item2 * .5;
}
}
class Trapeze : Shape
{
public double Top { get; private set; }
public double Bottom { get; private set; }
public double Height { get; private set; }
public Trapeze(double top, double bottom, double height)
{
Top = top;
Bottom = bottom;
Height = height;
}
public override double CalculateArea()
{
return (Top + Bottom) * Height * .5;
}
}
static void Main(string[] args)
{
List<Shape> shapes = new List<Shape>();
shapes.Add(new Trapeze(10, 100, 5));
shapes.Add(new Circle(5));
shapes.Add(new Rectangle(5, 5));
shapes.Add(new Trapeze(5, 5, 5));
shapes.Add(new RightTriangle(5, 10));
shapes.Add(new Rectangle(10, 5));
shapes.Add(new RightTriangle(25, 15));
shapes.Add(new Trapeze(10, 1, 25));
shapes.Add(new Rectangle(10, 5));
Console.WriteLine("Array currently contains:");
int index = 0;
foreach (var s in shapes)
{
Console.WriteLine("{0}) {1} with area = {2:f3}", index++, s.GetType().Name, s.CalculateArea());
}
}