- •Лабораторна робота №1
- •Теоретичні положення
- •Хід роботи
- •Варіанти
- •Контрольні запитання
- •Лабораторна робота №2
- •Теоретичні відомості
- •Лабораторна робота №4
- •Теоретичні відомості
- •Хід роботи
- •Хід роботи
- •Контрольні запитання
- •Контрольні запитання
- •Лабораторна робота №5
- •Теоретичні відомості
- •Хід роботи
- •Контрольні запитання
- •Лабораторна робота № 8
- •Теоретичні відомості
- •Контрольні запитання
- •Лабораторна робота № 10
- •Абстрактні класи
- •Хід роботи
- •Контрольні запитання
- •Лабораторна робота № 11
- •Теоретичні відомості
- •Хід роботи
- •Лабораторна робота №12
- •Теоретичні положення
- •Хід роботи
- •Контрольні запитання
- •Лабораторна робота № 13.
- •Теоретичні положення
- •Хід работи
- •Варіанти
- •Література
Контрольні запитання
Для чого потрібно застосовувати поняття «спадкоємність»?
Для чого оголошують клас віртуальним?
Як передаються параметри в множинному успадкуванні?
Лабораторна робота №5
Тема: Використання віртуальних базових класів
Мета: Ознайомитися з поняттям множинного наслідування .Спроектувати и написати програму, яка використовує ці поняття.
Література: Г.Шилдт,Самоучитель С++, С.В. Глушков, Практикум по С++.
Теоретичні відомості
Якщо один клас буде включений до складу іншого класу двічі, то уникнути повторного включення непрямого базового класу в похідний клас можна давши вказівку компілятору використовувати віртуальний 6азовий клас. Це здійснюється за допомогою ключового слова virtual яке вказується перед специфікатором успадкованого класу або після нього.
class IndBase{
private:
int x; public:
int GetX(){return x;}
void SetX(int _x){x = _x;}
double var;};
class Basel: virtual public IndBase {};
class Base2: virtual public IndBase{};c
lass Derived: public Basel, public Base2{};
Приклад програми
#include <iostream.h>
#include <string.h>
class computer_screen
{ public: computer_screen(char *, long, int, int); void show_screen(void); private: char type[32]; long colors; int x_resolution; int y_resolution; };
computer_screen::computer_screen(char *type, long colors, int x_res, int y_ree)
{ strcpy(computer_screen::type, type); computer_screen::colors = colors; computer_screen::x_resolution = x_res; computer_screen::y_resolution = y_res; }
void computer_screen::show_screen(void)
{ cout << "Тип экрана: " << type << endl; cout << "Цветов: " << colors << endl; cout << "Разрешение: " << x_resolution << " на " << y_resolution << endl; }
class mother_board
{ public: mother_board(int, int, int); void show_mother_board(void); private: int processor; int speed; int RAM; };
mother_board::mother_board(int processor, int speed, int RAM)
{ mother_board::processor = processor; mother_board::speed = speed; mother_board::RAM = ram; }
void mother_board::show_mother_board(void)
{ cout << "Процессор: " << processor << endl; cout << "Частота: " << speed << "МГц" << endl; cout << "ОЗУ: " << RAM << " МВайт" << endl; }
class computer : public computer_screen, public mother_board
{ public: computer(char *, int, float, char *, long, int, int, int, int, int); void show_computerf void); private: char name [64]; int hard_disk; float floppy; };
computer::computer(char *name, int hard_disk, float floppy, char *screen, long colors, int x_res, int y_res, int processor, int speed, int RAM) : computer_screen(screen, colors, x_res, y_res), mother_board(processor, speed, ram)
{ strcpy(computer::name, name); computer::hard_disk = hard_disk; computer::floppy = floppy; }
void computer::show_computer(void)
{ cout << "Тип: " << name << endl; cout << "Жорсткий диск: " << hard_disk << "МВайт" << endl; cout << "Гнучкий диск: " << floppy << "МВайт" << endl; show_mother_board(); show_screen(); }
void main(void)
{ computer my_pc("Compaq", 212, 1.44, "SVGA", 16000000, 640, 480, 486, 66, 8); my_pc.show_computer(); }
Якщо Ви проаналізуєте конструктор класу computer, то виявиться, що він викликає конструктори класів mother_board и computer_screen, як показано нижче:
computer::computer(char *name, int hard_disk, float floppy, char *screen, long colors, int x_res, int y_res, int processor, int speed, int RAM) : computer_screen(screen, colors, x_res, y_res), mother_board(processor, speed, RAM)
Хід роботи
Перевірити роботу програми з прикладу.
За прикладом доробити програму з лабораторної роботи №4. Створити похідний клас з двох базових.
Контрольні запитання
Для чого утворюються віртуальні базові класи?
Коли викликається конструктор віртуального базового класу?
Що таке ієрархія класів?
Лабораторна робота №6
Тема: Застосування перевантаження функцій.
Мета: Ознайомитися з поняттям перевантаження функцій .Спроектувати и написати програму, яка використовує ці поняття.
Література: Г.Шилдт,Самоучитель С++, С.В. Глушков, Практикум по С++.
Теоретичні відомості
Перевантаження функцій дозволяє програмам визначати декілька функцій з одним і тим же ім'ям і типом значення, яке повертається. Наприклад, наступна програма перевантажує функцію з ім'ям add _ values. Перше визначення функції складає два значення типу int. Друге визначення функції складає три значення. В процесі компіляції C коректно визначає функцію, яку необхідно використати :
#include <iostream.h>
int add_values(int a,int b)
{ return(a + b); )
int add_values (int a, int b, int c)
( return(a + b + c); )
void main(void)
{ cout << "200 + 801 = " << add_values(200, 801) << endl; cout << "100 + 201 + 700 = " << add_values(100, 201, 700) << endl; }
Так само наступна програма перевантажує функцію show _ message. Перша функція з ім'ям show _ message виводить стандартне повідомлення, параметри їй не передаються. Друга виводить передаване їй повідомлення, а третя виводить два повідомлення:
#include <iostream.h>
void show_message(void)
{ cout << "Стандартне повідомлення: " << "Вчимося програмувати на C++" << endl; }
void show_message(char *message)
{ cout << message << endl; }
void show_message(char *first, char *second)
{ cout << first << endl; cout << second << endl; }
void main(void)
{ show_message(); show_message("Вчимося програмувати на мові C++!"); show_message(" C++ гнучка мова!","Перевантаження - це круто!") ; }
Хід роботи
1.Перевірити роботу програм з теоретичних відомостей.
2. Додати в програми аналогічні функції.
3. Проаналізувати отримані результати та показати їх викладачу.
Контрольні запитання
1 Що таке перевантаження функцій?
Які обмеження накладаються на функції, що перевантажуються?
Як позначається функція, що перевантажується?
Лабораторна робота № 7
Тема: Конструктор і його перевантаження.
Мета: Ознайомитися з поняттям перевантаження конструкторів. .Спроектувати и написати програму, яка використовує ці поняття.
Література: Г.Шилдт,Самоучитель С++, С.В. Глушков, Практикум по С++.
Теоретичні відомості
В програмі застосовуються конструктори, що перевантажуються :
employee(char *, long, float); employee(char *, long); Приклад програми.
#include <iostream.h>
#include <string.h>
class employee
{ public: employee(char *, long, float); employee(char *, long); void show_employee(void); int change_salary(float) ; long get_id(void); private: char name [64]; long employee_id; float salary; };
employee::employee(char *name, long employee_id, float salary)
{ strcpy(employee::name, name); employee::employee_id = employee_id; if (salary < 50000.0) employee::salary = salary; else // Таким оклад не може бути employee::salary = 0.0; }
employee::employee(char *name, long employee_id)
{ strcpy(employee::name, name); employee::employee_id = employee_id; do
{ cout << "Введіть оклад для " << name << " меньше $50000: "; cin >> employee::salary; } while (salary >= 50000.0); }
void employee::show_employee(void)
{ cout << "Службовець: " << name << endl; cout << "Номер службовця: " << employee_id << endl; cout << "Оклад: " << salary << endl; }
void main(void)
{ employee worker("Happy Jamsa", 101, 10101.0); employee manager("Jane Doe", 102); worker.show_employee(); manager.sbow_employee(); }
