- •Практичне заняття 8 Теоретична частина
- •Завдання
- •Int main()
- •Void push(int var)
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Лабораторне заняття 9 Теоретична частина
- •Зміст завдання
- •Лабораторне заняття 10 Теоретична частина
- •Практичне заняття 9 Теоретична частина
- •Завдання
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Практичне заняття 10-11 Теоретична частина
- •Завдання
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Лабораторне заняття 11-12 Теоретична частина
- •Завдання 1
- •Завдання 2
- •Завдання 3
- •Int main()
- •Практичне заняття 12-13 Теоретична частина
- •Завдання
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Лабораторне заняття 13 Теоретична частина
- •Завдання 1
- •Int main()
- •Завдання 2
- •Практичне заняття 14 Теоретична частина
- •Завдання
- •Int main()
- •Int main()
- •Лабораторне заняття 14 Теоретична частина
- •Завдання
Int main()
{clrscr();
String s3=”Будь-яка пробна фраза”;
cout<<”\ns3=”;s3.display();
String s1,s2;
s1=s2=s3;
cout<<”\ns1=”;s1.display();
cout<<”\ns2=”;s2.display();
cout<<endl;
bioskey(0);
return 0;
}
Програма 22.21
Лабораторне заняття 11-12 Теоретична частина
Базується на матеріалі лекцій 22-25. Віртуалізація функцій, дружні функції. Перевизначення конструктора копіювання та оператора присвоювання.
Завдання 1
Створити клас publication (відповідає видавничій компанії, що випускає книги та аудіодиски), який містив би поля: title (заголовок) рядкового типу і price (ціна) типу float та методи getdata() і putdata() для вводу і виводу даних відповідно. Методи оголосити віртуальними.
Використовуючи цей метод як базовий, створити два похідні класи: book (книги) та tape (аудіодиски). Клас book порівняно з базовим містить додаткове поле даних pages (кількість сторінок) типу int. Клас tape порівняно з базовим містить додаткове поле time (час тривання) типу float. Для обох похідних класів перевизначити обидва методи базового класу.
В головній функції створити масив вказівників на клас publication. Для введення даних організуйте цикл, в якому спершу користувач вибирав би, чи наступний введений об’єкт має бути книгою чи аудіодиском, потім виконувався б new для створення відповідного об’єкту, викликався метод введення і видавався запит про продовження вводу. Після завершення виводу вивести результат для всіх введених кних та аудіодисків, використовуючи цикл for та єдиний вираз типу pubarr[j]->putdata(). За зразок можна взяти програму 22.4.
Завдання 2
В класі Distance створити перезавантажувану операцію множення, яка давала б змогу множити дві відстані. Зробити цю функцію дружньою,, щоб можна було використовувати вираз типу dist2=2.5*dist1. Нам знадобиться конструктор з одним аргументом для переведення величин типу float у Distance. Написати головну функцію, яка б кількома способами перевіряла роботу перезавантаженого оператора. Використовувати як зразок програму 22.10
Завдання 3
Класи можуть поводитися як масиви. Далі приведено приклад програми, яка це здійснює:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<bios.h>
////////////////
class Array
{private:
int* ptr;
int size;
public:
Array():ptr(0),size(0)
{ }
Array(int s):size(s)
{ptr=new int[s];}
~Array()
{delete[] ptr;}
int& operator[](int j)
{return *(ptr+j);}
};
///////////////
Int main()
{clrscr();
const int ASIZE=10;
Array arr1(ASIZE);
for(int j=0;j<ASIZE;j++)
arr1[j]=j*j;
cout<<arr1[j]<<" ";
cout<<endl;
bioskey(0);
return 0;
}
Взявши цю програму за основу, додати перезавантажуване присвоювання і перезавантажуваний оператор копіювання до класу Array. Потім додати до головної функції вирази Array arr2(arr1); і arr3=arr1 для перевірки того, що перезавантажені оператори працюють. Конструктор копіювання повинен створювати новий об’єкт зі своїм власним місцем у пам’яті, виділеним для збереження елементів масиву. І конструктор копіювання і оператор присвоювання повинні копіювати вміст старого об’єкту класу Array в новий.
Рекомендовані описувачі для конструктора копіювання та оператора присвоювання
Array(Array&);
Array& operator=(Array&);
В тілі перезавантаженого оператора присвоювання попередньо видалити попередній вміст масиву за допомогою функції delete
delete[] ptr;
Нове місце в пам’яті можна виділяти за допомогою операції
ptr=new int[a.size];
Присвоєння елементів одного масиву-об’єкту іншому можна здійснювати за допомогою виразу
*(ptr+j)=*(a.ptr+j);
