
- •Лабораторна робота №1
- •Порядок виконання роботи
- •Завдання 1
- •Завдання 2
- •Завдання 3
- •Теоретичні відомості Масиви динамічної пам'яті
- •Приклад виконання завдання 1
- •Лістинг програми
- •Приклад виконання завдання 2
- •Лістинг програми
- •Приклад виконання завдання 3
- •Лістинг програми
- •Контрольні запитання
- •Лабораторна робота №2
- •Порядок виконання роботи
- •Завдання 1
- •Завдання 2
- •Теоретичні відомості Читання і запис текстових файлів
- •Читання і запис бінарних файлів
- •Відкриття бінарних файлів
- •Файли з послідовним доступом
- •Запис даних у файл з послідовним доступом
- •Файли з довільним доступом
- •Приклад виконання завдання 1
- •Приклад виконання завдання 2
- •Контрольні запитання
- •Лабораторна робота №3
- •Порядок виконання роботи
- •Завдання 1
- •Завдання 2
- •Завдання 3
- •Теоретичні відомості
- •Обмеження доступу до членів класу
- •Специфікатори доступу
- •Вбудовані функції-члени
- •Приклад виконання завдання 1.
- •Приклад виконання завдання 2.
- •Приклад виконання завдання 3.
- •Контрольні запитання
- •Лабораторна робота №4
- •Порядок виконання роботи
- •Завдання 2
- •Теоретичні відомості Конструктори і деструктори
- •Правила роботи з конструкторами і деструкторами
- •Варіант 10. Розробити описовий алгоритм, схему алгоритму і написати метод для підрахування кількості слів в текстовому файлі.
- •Приклад виконання завдання 2
- •Контрольні запитання
- •Лабораторна робота №5
- •Порядок виконання роботи
- •Завдання 1
- •Завдання 2
- •Теоретичні відомості Принципи спадкування в ооп
- •Оголошення похідних класів
- •Конструктори похідного класу
- •Функції члени похідного класу
- •Заборонені члени класу (Protected)
- •Приклад виконання Завдання 1
- •Контрольні запитання
- •Лабораторна робота №6
- •Порядок виконання роботи
- •Завдання 1
- •Теоретичні відомості Перевантаження операторів
- •Приклад виконання завдання 1
- •Приклад виконання завдання 2
- •Приклад виконання завдання 3
- •Приклад виконання завдання 4
- •Контрольні запитання
- •Лабораторна робота №7
- •Порядок виконання роботи
- •Завдання 1.
- •Завдання 2.
- •Теоретичні відомості
- •Структура наслідування класів
- •Постановка задачі
- •Розробити клас трикутника, чотирикутника, кола, точки
- •Контрольні запитання
- •Лабораторна робота №8
- •Порядок виконання роботи
- •Завдання 1
- •Контрольні запитання
- •Лабораторна робота №9
- •Порядок виконання роботи
- •Завдання 1
- •Теоретичні відомості Множинне спадкування
- •Контрольні запитання
- •Лабораторна робота №10
- •Порядок виконання роботи
- •Завдання 1
- •Теоретичні відомості Шаблони
- •Параметризовані класи
- •Визначені об’єкти-потоки
- •Операції поміщення та вилучення
- •Приклад виконання Завдання з варіанту 2
- •Контрольні запитання.
- •Лабораторна робота №11
- •Порядок виконання
- •Завдання 1
- •Завдання 2
- •Завдання 3 Варіант 1. Задача “Банківське переведення” (дата, час, № рахунку, розмір рахунку).
- •Ітератори
- •Для роботи з вектором необхідно:
- •Приклад роботи з вектором
- •Алгоритми
- •Застосування алгоритмів до вектора
- •Приклад 1 виконання Завдання 1
- •Приклад 2 виконання Завдання 2
- •Приклад 3 виконання завдання №3
- •Контрольні запитання
- •Завдання 1
- •Теоретичні відомості Приклад розробки програми
- •Контрольні запитання
- •Лабораторна робота №13
- •Порядок виконання
- •Завдання 2.
- •Теоретичні відомості
- •Стандартні потоки для базових класів
- •Форматування даних при обмінах з потоками
- •Маніпулятори
- •Приклад розробки програми
- •Контрольні запитання
- •Лабораторна робота №14
- •Порядок виконання
- •Завдання
- •Теоретичні відомості
- •Контрольні запитання
Приклад виконання завдання 3
Розробити ієрархію класів для роботи з одновимірними динамічними масивами з перевантаженими операторами new[] і delete[], яка містить: два конструктора, деструктор, функцію визначення довжини тексту, функцію визначення кількості рядків в тексті, функцію визначення кількості слів в тексті, функцію визначення кількості пробілів у тексті, функцію видалення зайвих пробілів з тексту.
Лістинг програми
#include<iostream>
usingnamespace std;
#include<malloc.h>
class SomeClass{
int some;
public:
// перевантажені оператори new і delete,
// тут також використовуютсья додаткові параметри, що передаються усередині операторів
void * operatornew(size_t size,char* str = "New");
voidoperatordelete(void* ptr);
// перевантажені оператори new [] і delete []
void * operatornew [] (size_t fullsize, char* str = "New []");
void operator delete [] (void* ptr);
};
void * SomeClass::operatornew( size_t size,char* str)
{
cout <<"\n"<<str<<"\n";
void*ptr = malloc(size);
if(!ptr){
cout<<"\nError memory new!!!\n";
}
else{
cout<<"\nMemory new - OK!!!\n";
}
return ptr;
}
void * SomeClass::operatornew[]( size_t fullsize,char*
str)
{
cout <<"\n"<<str<<"\n";
void*ptr = malloc(fullsize);
if(!ptr){
cout<<"\nError memory new[]!!!\n";
}
else{
cout<<"\nMemory new[] - OK!!!\n";
}
return ptr;
}
void SomeClass::operator delete( void* ptr)
{
free(ptr);
cout<<"\nDelete memory\n";
}
void SomeClass::operator delete[](void* ptr)
{
free(ptr);
cout<<"\nDelete [] memory\n";
}
int main()
{
SomeClass *p = new SomeClass;
SomeClass *r = new SomeClass [3];
delete p;
delete[]r;
system("pause");
}
Результат роботи програми:
New
Memory new - OK!!!
New []
Memory new[] - OK!!!
Delete memory
Delete [] memory
Приклад виконання завдання 4
Розробити ієрархію класів для роботи з двовимірними динамічними масивами з перевантаженим оператором інкремента (--) та декремента(++), яка містить: два конструктора, деструктор, функцію визначення довжини тексту, функцію визначення кількості рядків в тексті, функцію визначення кількості слів в тексті, функцію визначення кількості пробілів у тексті, функцію видалення зайвих пробілів з тексту.
Лістинг програми
#include<iostream>
usingnamespace std;
// Клас, що реалізує роботу з "парою чисел"
class Pair{
// Ціле число.
int N;
// Дійсне число.
double x;
public:
// Конструктор з параметрами
Pair(int n, double xn)
{
N = n;
x = xn;
}
// Функція для показу даних на екран
void display()
{
cout <<"\nPair: N = "<< N <<" x = "<< x <<"\n";
}
// Компонентна функція (префіксна --):
Pair&operator -- ()
{
// Зменшуємо вміст об’єкта в десять разів і повертаємо його на місце виклику оператора
N /= 10;
x /= 10;
return *this;
}
// Компонентна фнкція (постфіксна --):
Pair&operator -- (int k)
{
// тимчасово зберігаємо вміст об’єкта в незалежну змінну типу Pair (cпроба використати тут значення додаткового параметра int k підтверджує його рівність 0)
Pair temp(0,0.0);
temp.N=N+k;
temp.x=x+k;
// зменшуємо об’єкт в 10 раз
N /= 10;
x /= 10;
// повертаємо першочергове значення об’єкта.
// таким "тактичним ходом" ми досягаємо ефекту постфіксної форми, тобто в ситуації А=B++.B А записується поточне значення об’єкта B, тоді як сам об’єкт B змінюється
return temp;
}
};
int main()
{
// створюємо об’єкт Z, саме з ним ми і будемо експериментувати
Pair Z(10,20.2);
// показ об’єкта в першочерговому вигляді
cout<<"\nObject Z (before):\n";
Z.display();
cout<<"\n-----------------\n";
// присвоюємо об’єкту Pref вираз з префіксною формою (в даному випадку спочатку зміниться Z, а потім відбудеться присвоювання).
Pair Pref=--Z;
// демонструємо результат роботи префіксної форми
cout<<"\nPrefix\n";
cout<<"\nObject Pref:\n";
Pref.display();
cout<<"\nObject Z (after):\n";
Z.display();
cout<<"\n-----------------\n";
// присвоюємо об’єкту Postf вираз з постфіксною формою (в даному випадку спочатку відбудеться присвоювання, а потім зміниться Z).
Pair Postf=Z--;
// демонструємо результат роботи постфіксної форми
cout<<"\nPostfix\n";
cout<<"\nObject Postf:\n";
Postf.display();
cout<<"\nObject Z (after):\n";
Z.display();
system ("pause");
}
Результат роботи програми:
Object Z (before):
Pair: N = 10 x = 20.2
-----------------
Prefix
Object Pref:
Pair: N = 1 x = 2.02
Object Z (after):
Pair: N = 1 x = 2.02
-----------------
Postfix
Object Postf:
Pair: N = 1 x = 2.02
Object Z (after):
Pair: N = 0 x = 0.202