Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zvit.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Практична робота № 2

“Класова ієрархія та механізм успадкування. Віртуальність та поліморфізм"

Мета роботи: навчитися створювати ієрархії класів та використовувати віртуальність і

поліморфізм .

Завдання: Створити клас для зберігання бази даних, вказаної у варіанті, із вказаними

полями. Утворити похідний клас, залучивши до нього як мінімум два додаткових поля таким

чином, щоб клас набув більшої спеціалізованості. Для другого класу використати конструктор,

аби він містив усі аргументи, необхідні для ініціалізації об’єкту похідного класу. Створіть

необхідні функції, що дозволяють виводити інформацію на екран та можливість додавати та

знищувати записи.

Короткі теоретичні відомості

Віртуальний метод або віртуальна функція — метод об'єкта в об'єктно-орієнтованому програмуванні, різний для базового класу і класу нащадка.

Концепція віртуальної функції вирішує наступну проблему:

У ООП, якщо клас-нащадок наслідується від базового класу, об'єкт екземпляр класу-нащадку може використовуватись або як екземпляр батьківського класу (бути приведеним до батьківського класу), або як екземпляр класу-нащадка. Якщо у класі-нащадку є функції, що перекривають (мають таку ж сигнатуру) функції із батьківського класу, то поведінка при виклику таких методів (при використанні даного об'єкта як екземпляра батьківського класу) є невизначеною.

Відмінність між віртуальністю і невіртуальністю функцій вирішує цю невизначеність. Якщо функція описана як віртуальна у базовому класі, тоді буде викликана функція із класу нащадка (якщо така існує). Якщо вона не віртуальна, тоді — із батьківського класу.

Поліморфі́зм — концепція в програмуванні, відповідно до якої використовується спільний інтерфейс для обробки даних різних спеціалізованих типів.

На противагу поліморфізму, концепція мономорфізму вимагає однозначного зіставлення.

В контексті об'єктно-орієнтованого програмування, найпоширенішим різновидом поліморфізму є здатність екземплярів підкласу грати роль об'єктів батьківського класу, завдяки чому екземпляри підкласу можна використовувати там, де використовуються екземпляри батьківського класу.[1]

Прикладом поліморфізму в більшості мов програмування є бінарний оператор +, який може мати своїми аргументами дані різного типу: цілі числа, числа з плаваючою комою, комплексні числа та навіть рядки:

1 + 2 - операнди цілого типу, результат цілого типу.

1.2 + 1.0e3 - операнди дійсних типів, результат дійсного типу

"Андрій" + "Ольга" - операнди рядки, результат - конкатенований рядок

Поліформізм реалізується в багатьох мовах програмування за домогою перевантаження функцій.

Предметна область БД Поля бази даних

„перелік товарів” Назва товару, вага, ціна, кількість.

Лістинг програми 1: див. додаток 6А

Лістинг програми 2: див. додаток 6В

Додаток А

Блок-схема 1

Лістинг 1А

//---------------------------------------------------------------------------

#pragma hdrstop

#include <iostream.h>

//---------------------------------------------------------------------------

#pragma argsused

int main()

{

int a,count = 0;

cout<<"Type your numeric : ";

cin>>a;

for (int i = 1; i <=a ; i++)

{

int z = a%i;

if (z==0) {count++;}

}

if (count < 3) cout<<"\nNumeric "<<a<<" is simple.\n";

else cout<<"\nNumeric "<<a<<" is not simple.\n";

system("pause");

return 0;

}

//---------------------------------------------------------------------------

Додаток В

Блок-схема 2

Лістинг 2А

//---------------------------------------------------------------------------

#pragma hdrstop

#include <iostream.h>

//---------------------------------------------------------------------------

#pragma argsused

int main()

{

double a,b,c,xp,xk,h,f;

int x;

cout<<"Type <a> : ";

cin>>a;

cout<<"\nType <b> : ";

cin>>b;

cout<<"\nType <c> : ";

cin>>c;

cout<<"\nType <X start> : ";

cin>>xp;

cout<<"\nType <X end> : ";

cin>>xk;

cout<<"\nType step <H> : ";

cin>>h;

cout<<"\n\n__________________________________\n";

for (x = xp; x <= xk; x+=h) {

if ((x + c < 0)&&(a!=0)) f = -a*pow(x,3.0) - b;

else if ((x + c > 0)&&(a==0)) f = (x-a)/(x-c);

else f = x/c + c/x;

if (((int)a%(int)b)|((int)a%(int)c)==0)

f=(int)f; else f=f;

cout<<"| x = "<<x<<" | F(x) = "<<f<<" |\n__________________________________\n";

}

system("pause");

return 0;

}

//---------------------------------------------------------------------------

Додаток С

Лістинг 3А

//---------------------------------------------------------------------------

#pragma hdrstop

#include <iostream.h>

#include <tchar.h>

#include <algorithm>

//---------------------------------------------------------------------------

#pragma argsused

int f_1 (double *a, unsigned int N, double C)

{

double buf=0.0, dob=1.0, min=a[0];

int k=0;

for (int i = 0; i < N; i++) {

if (a[i]>C) {k++;}

}

cout<<"\nThere are "<<k<<" element(s) bigger then "<<C<<" .\n";

int q=0;

for (int i = 0; i < N; i++){

if (a[i]<min) {min=a[i]; q = i;}

}

for (int i = q+1; i < N; i++) {

dob = dob*a[i];

}

cout<<"\nThe product of elements wich go after <"<<min<<"> = "<<dob<<" .\n";

sort(a,a+N);

cout<<"\nOrdered array : \n";

for (int i = 0; i < N; i++){cout<<a[i]<<" ";}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]