Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВСЕ ЛАБОРАТОРНІ І СЕМЕСТР.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
250 Кб
Скачать
☆

Контрольні запитання

  1. Для чого потрібно застосовувати поняття «спадкоємність»?

  2. Для чого оголошують клас віртуальним?

  3. Як передаються параметри в множинному успадкуванні?

Лабораторна робота №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)

Хід роботи

  1. Перевірити роботу програми з прикладу.

  2. За прикладом доробити програму з лабораторної роботи №4. Створити похідний клас з двох базових.

Контрольні запитання

  1. Для чого утворюються віртуальні базові класи?

  2. Коли викликається конструктор віртуального базового класу?

  3. Що таке ієрархія класів?

Лабораторна робота №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 Що таке перевантаження функцій?

  1. Які обмеження накладаються на функції, що перевантажуються?

  2. Як позначається функція, що перевантажується?

Лабораторна робота № 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(); }