МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Лаболаторна робота №4
з дисципліни
«Алгоритмічне та програмне забезпечення комп’ютеризованих систем керування»
Варіант №9
Лабораторна 4. Абстрактні класи
/* Абстрактний клас означується ключовим словом 'abstract'
В абстрактних класах 'abstract class Фігура' можна означити абстрактні методи 'public abstract void Площа();'
В абстрактному методі 'public abstract void Площа();' немає тіла. Реалізація метода переноситься
в класи-спадкоємці (Квадрат, Трикутник, Коло), при цьому метод 'public override void Площа()' в цих класах позначаються ключовим словом 'override'
і в кожному класі-спадкоємці метод 'Площа()' має своє тіло реалізації, наприклад в класі Квадрат наступне: ( Console.WriteLine("Площа {0}а складає {1}", назва, висота * ширина);
Console.ReadLine();)
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
static void Main()
{
Фігура[] розрахунок = new Фігура[] { new Квадрат(10, 10, "квадрат"), //означено масив абстрактного класу Фігура. В цьому масиві абстрактного класу Фігура зберігаються обєкти (Квадрат, Трикутник, Коло) трьох похідних класів
new Трикутник(5, 25, "трикутник"),
new Коло(10, "диск")};
for (int i = 0; i < розрахунок.Length; i++)
розрахунок[i].Площа();
}
}
abstract class Фігура
{
public int висота, ширина;//відкриті поля (висота, ширина) типу int
public string назва;//відкрите поле(назва) типу string
public Фігура(int висота, int ширина, string назва) //перезавантажений конструктор, що дозволяє всі значення цих полів встановити при означенні фігури
{
this.висота = висота;
this.ширина = ширина;
this.назва = назва;
}
public abstract void Площа(); //Означено абстрактний метод (визначено модифікатор доступу-'public',прописано ключове слово-'abstract',
//вказано тип значення, що повертається-'void', далі приписано імя методу-'Площа()').
//Тіла в абстрактному методі немає. Реалізація метода переноситься в класи-спадкоємці (Квадрат, Трикутник, Коло).
}
class Квадрат : Фігура
{
public Квадрат(int висота, int ширина, string назва) : base(висота, ширина, назва) { }
public override void Площа()
{
Console.WriteLine("Площа {0}а складає {1}", назва, висота * ширина);
Console.ReadLine();
}
}
class Трикутник : Фігура
{
public Трикутник(int висота, int ширина, string назва) : base(висота, ширина, назва) { }
public override void Площа()
{
Console.WriteLine("Площа {0}а складає {1}", назва, висота * ширина / 2);
Console.ReadLine();
}
}
class Коло : Фігура
{
float p = 3.141596f;
public Коло(int радіус, string назва) : this(радіус, 0, назва) { } //обєкту () класу Коло передаються значення радіус і назва. Цей конструктор переадресовує їх закритому конструктору (передає три параметри: радіус, 0, назва)
Коло(int висота, int ширина, string назва) : base(висота, ширина, назва) { } // закритий конструктор отримує три параметри (радіус, 0, назва) і переадресовує їх конструктору 'public Фігура(int висота, int ширина, string назва)'
//в базовому класі Фігура
public override void Площа()
{
Console.WriteLine("Площа {0}а складає {1}", назва, p * висота * висота);
Console.ReadLine();
}
}