Практическая работа №12 Полиморфизмы методов класса. Базовый, средний и высокий уровни
Download 224.81 Kb.
|
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: |
ma'muriyatiga murojaat qiling