Практическая работа №12 Полиморфизмы методов класса. Базовый, средний и высокий уровни


Download 224.81 Kb.
bet3/4
Sana21.06.2023
Hajmi224.81 Kb.
#1645005
TuriПрактическая работа
1   2   3   4
Bog'liq
11.3 все уровни

Средний уровень
Задание: написать программу согласно заданию. Во всех классах описать необходимые конструкторы, при помощи которых будут создаваться объекты классов. Параметры создаваемых объектов задавать константами или вводить с клавиатуры/формы (по желанию студента) и передавать в конструкторы объектов в виде параметров. Вывод информации должен осуществляться либо на консоль или в многострочное текстовое поле (Memo). Создать класс Прямоугольник, заданный значениями длин двух сторон (a и b), с виртуальными методами «Периметр» и «Площадь», возвращающими периметр и площадь соответственно, а также виртуальный метод «Увеличить в два раза», увеличивающий в два раза каждую из сторон. Определить также метод «Информация», который возвращает строку, содержащую информацию об треугольнике: длины сторон, периметр и площадь . Создать также класс наследник Прямоугольник со скругленными углами, с дополнительным параметром радиус скругления (r). Для него переопределить. Периметр по формуле p – 8·r + 2·π·r, где p – периметр обычного прямоугольника с теми же сторонами, а Площадь по формуле S – 4·r 2 + π·r 2 , где S – площадь обычного прямоугольника. Также переопределить метод «Увеличить в два раза» так, чтобы он также увеличивал в два раза радиус скругления (по-прежнему увеличивая стороны в два раза). В главной программе (либо по нажатию на кнопку) создать обычный прямоугольник и прямоугольник со скругленными углами и вывести информацию о них. После этого увеличить оба прямоугольника в два раза и выдать обновленную информацию
Решение:
using System;

class Rectangle


{
protected double sideA; // Длина первой стороны прямоугольника
protected double sideB; // Длина второй стороны прямоугольника

public Rectangle(double a, double b)


{
sideA = a;
sideB = b;
}

public virtual double Perimeter()


{
return 2 * (sideA + sideB);
}

public virtual double Area()


{
return sideA * sideB;
}

public virtual void DoubleSize()


{
sideA *= 2;
sideB *= 2;
}

public string Info()


{
return $"Длина стороны A: {sideA}\nДлина стороны B: {sideB}\nПериметр: {Perimeter()}\nПлощадь: {Area()}";
}
}

class RoundedRectangle : Rectangle


{
private double radius; // Радиус скругления углов прямоугольника

public RoundedRectangle(double a, double b, double r) : base(a, b)


{
radius = r;
}

public override double Perimeter()


{
double p = base.Perimeter();
return p - 8 * radius + 2 * Math.PI * radius;
}

public override double Area()


{
double s = base.Area();
return s + 4 * radius * radius + Math.PI * radius * radius;
}

public override void DoubleSize()


{
base.DoubleSize();
radius *= 2;
}
}

class Program


{
static void Main()
{
// Создание обычного прямоугольника
Rectangle rectangle = new Rectangle(5, 8);
Console.WriteLine("Информация о прямоугольнике:");
Console.WriteLine(rectangle.Info());
Console.WriteLine();

// Создание прямоугольника со скругленными углами


RoundedRectangle roundedRectangle = new RoundedRectangle(5, 8, 2);
Console.WriteLine("Информация о прямоугольнике со скругленными углами:");
Console.WriteLine(roundedRectangle.Info());
Console.WriteLine();

// Увеличение размеров обоих прямоугольников в два раза


rectangle.DoubleSize();
roundedRectangle.DoubleSize();

Console.WriteLine("Обновленная информация о прямоугольнике:");


Console.WriteLine(rectangle.Info());
Console.WriteLine();

Console.WriteLine("Обновленная информация о прямоугольнике со скругленными углами:");


Console.WriteLine(roundedRectangle.Info());
Console.WriteLine();
}
}
Класс Rectangle представляет обычный прямоугольник и содержит поля для хранения длин сторон sideA и sideB. В нем реализованы виртуальные методы Perimeter и Area, которые вычисляют периметр и площадь прямоугольника соответственно. Также есть виртуальный метод DoubleSize, который увеличивает каждую сторону прямоугольника в два раза, и метод Info, который возвращает информацию о прямоугольнике.

Класс RoundedRectangle является наследником класса Rectangle и добавляет дополнительное поле radius для хранения радиуса скругления углов прямоугольника. В нем переопределены методы Perimeter, Area и DoubleSize, чтобы учесть скругление углов и изменить формулы вычисления периметра и площади.


В функции Main создаются объекты классов Rectangle и RoundedRectangle с заданными значениями сторон и радиуса скругления. Затем выводится информация о каждом прямоугольнике. После этого оба прямоугольника увеличиваются в два раза и выводится обновленная информация о них.
using System; - директива using, которая позволяет использовать типы и функции из пространства имен System.
class Rectangle - объявление класса Rectangle.
protected double sideA; - объявление защищенного поля sideA для хранения длины первой стороны прямоугольника.
protected double sideB; - объявление защищенного поля sideB для хранения длины второй стороны прямоугольника.
public Rectangle(double a, double b) - конструктор класса Rectangle, принимающий два аргумента a и b для инициализации полей sideA и sideB.
public virtual double Perimeter() - виртуальный метод Perimeter, который вычисляет периметр прямоугольника.
public virtual double Area() - виртуальный метод Area, который вычисляет площадь прямоугольника.
public virtual void DoubleSize() - виртуальный метод DoubleSize, который увеличивает каждую сторону прямоугольника в два раза.
public string Info() - метод Info, который возвращает информацию о прямоугольнике в виде строки.
using System; - директива using, которая позволяет использовать типы и функции из пространства имен System.
class Rectangle - объявление класса Rectangle.
protected double sideA; - объявление защищенного поля sideA для хранения длины первой стороны прямоугольника.
protected double sideB; - объявление защищенного поля sideB для хранения длины второй стороны прямоугольника.
public Rectangle(double a, double b) - конструктор класса Rectangle, принимающий два аргумента a и b для инициализации полей sideA и sideB.
public virtual double Perimeter() - виртуальный метод Perimeter, который вычисляет периметр прямоугольника.
public virtual double Area() - виртуальный метод Area, который вычисляет площадь прямоугольника.
public virtual void DoubleSize() - виртуальный метод DoubleSize, который увеличивает каждую сторону прямоугольника в два раза.
public string Info() - метод Info, который возвращает информацию о прямоугольнике в виде строки.
class Program - объявление класса Program.
static void Main(string[] args) - главный метод программы.
Rectangle rectangle = new Rectangle(5, 10); - создание объекта класса Rectangle с заданными значениями сторон.
RoundedRectangle roundedRectangle = new RoundedRectangle(5, 10, 2); - создание объекта класса RoundedRectangle с заданными значениями сторон и радиуса скругления.
Console.WriteLine(rectangle.Info()); - вывод информации о прямоугольнике на консоль.
Console.WriteLine(roundedRectangle.Info()); - вывод информации о прямоугольнике со скругленными углами на консоль.
rectangle.DoubleSize(); - увеличение прямоугольника в два раза.
roundedRectangle.DoubleSize(); - увеличение прямоугольника со скругленными углами в два раза.
Console.WriteLine(rectangle.Info()); - вывод информации о прямоугольнике после увеличения на консоль.
Console.WriteLine(roundedRectangle.Info()); - вывод информации о прямоугольнике со скругленными углами после увеличения на консоль.
Вывод:
Программа создает объекты классов Rectangle и RoundedRectangle, вычисляет и выводит информацию о них, а затем увеличивает размеры объектов в два раза и выводит обновленную информацию.

Download 224.81 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling