Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OTP_labs-NEW2.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
787.97 Кб
Скачать

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

9.6.1 Чим відрізняються поняття класу та структури у С++? Дайте загальне означення класу.

9.6.2 Опишіть загальну структуру класу.

9.6.3 Що таке інтерфейс класу та його реалізація?

9.6.4 У чому полягає роль конструкторів та деструкторів у класі?

9.6.5 Які способи можна застосувати для ініціалізації об’єкта класу? Як для цього застосовуються конструктори?

9.6.6 Чим відрізняються функції – члени класу від функцій, не пов’язаних з будь-яким класом?

9.6.7 Чим відрізняється динамічний клас від простого класу?

9.6.8 Яку структуру має об’єкт динамічного класу, у чому полягають його особливості?

9.6.9 Поясніть особливості виконання операції присвоєння для об’єктів динамічного класу.

9.6.10 У чому полягають особливості операцій створення та знищення об’єктів динамічного класу?

9.6.11 Які конструктори повинні бути обов’язково у динамічному класі?

10 Створення похідних класів

Мета роботи: отримати теоретичні знання та практичні навички проектування похідних класів мовою С++.

10.1 Теоретичні відомості

Успадкування – процес, згідно якого один клас може успадковувати властивості іншого. Базовый клас спадкується похідним класом. Загальний формат успадкування має наступний вигляд:

class им’я_похідного класу : доступ им’я базового класу

{

}

Якщо один клас успадковує інший, члени базового класу стають членами похідного. Статус доступу членів базового класу в похідному класі визначається специфікатором доступу, який задається одним із ключових слів: public, private або protected. Якщо специфікатор не вказаний, то по замовчанню використовується private.

Якщо базовий клас унаслідується як public, всі його public елементи стають public членами похідного класу. Всі private члены базового класу залишаються закритими в рамках цього класу і є недоступними в рамках похідного. Приклад відкритого успадкування:

#include <iostream>

using namespace std;

class base {

int i, j;

public:

void set(int a, int b) { i = a; j = b; }

void show() { cout << i << " " << j << "\n";}

};

class derived : public base {

int k;

public:

derived(int x) { k = x; }

void showk() { cout << k << "\n"; }

};

int main()

{ derived ob(3);

ob.set(1, 2);// access member of base

ob.show(); // access member of base

ob.showk(); // uses member of derived class

return 0;}

Якщо базовий клас успадковується як private клас, його public члени стають private членами похідного класу. Якщо член класу об’явлений з використанням специфікатора protected, він не буде доступним для інших елементів програми, які не є членами даного класу. Якщо базовий клас успадковується як public, захищені члени базового класу стають захищеними членами похідного. Вони доступні для похідного класу та для класів, які будуть наслідувати його, але є закритими для інших елементів програми. Приклад успадкування з використанням protected членів:

#include <iostream>

using namespace std;

class base {

protected:

int i, j; // private для класу base, но доступні для класу derived

public:

void set(int a, int b) { i = a; j = b; }

void show() { cout << i << " " << j << "\n"; }

};

class derived : public base {

int k;

public:

// клас derived може отримати доступ до членів i та j класу base

void setk() { k = i*j; }

void showk() { cout << k << "\n"; }

};

int main(){

derived ob;

ob.set(2, 3); // метод доступний в derived

ob.show(); // метод доступний в derived

ob.setk();

ob.showk();

return 0;

}

Похідний клас може успадковувати два та більше базових класів. Приклад множинного успадкування:

#include <iostream>

using namespace std;

class base1 {

protected:

int x;

public:

void showx() { cout << x << "\n"; }

};

class base2 {

protected:

int y;

public:

void showy() { cout << y << "\n"; }

};

// Inherit multiple base classes.

class derived: public base1, public base2 {

public:

void set(int i, int j) { x = i; y = j; }

};

int main()

{ derived ob;

ob.set(10, 20); // provided by derived

ob.showx(); // from base1

ob.showy(); // from base2

return 0;

}

Конструктори викликаються в порядку походження класів, а деструктори – в зворотному порядку.

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