Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.08 Mб
Скачать

Int mainO

{

derived ObjD(3,4);

ObjD.showB("Ba30Bnft клас:"); // Відображає числа 4 З getchO; return 0;

}

У цьому коді програми конструктор класу derived оголошується з двома пара­метрами х і у. Проте конструктор derived() використовує тільки параметр х, а пара­метр у передається конструктору baseClass(). У загальному випадку конструктор похідного класу повинен оголошувати параметри, які приймає його клас, а також ті, які потрібні базовому класу. Як це показано у наведеному вище прикладі, будь- які параметри, що потрібні базовому класу, передаються йому у переліку аргумен­тів базового класу, які вказуються після двокрапки. Розглянемо приклад програ­ми, у якій продемонстровано механізм передачі параметрів конструкторам декіль­кох базових класів.

Код програми 5.13. Демонстрація механізму передачі параметрів конструкто­рам декількох базових класів

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

class baseA { // Оголошення базового класу

protected: int с;

public:

baseA(int х) {с = х; cout«"Створення baseA-об'єкта" « endl;}

~baseA() {cout«"Руйнування baseA-об'єкта"« endl;}

};

// Оголошення базового класу class baseB { // Оголошення базового класу protected: int f; public:

baseB(int x) {f = x; cout«"Створення baseB-об'єкта" « endl;}

~baseB() {cout«"Руйнування baseB-об'єкта"« endl;}

};

// Оголошення похідного класу class derived: public baseA, public baseB { intd; public:

derived(int x, int y, int z): baseA(y), baseB(z)

{d = x; cout«"Створення derived-об'єкта"« endl;}

~derived() {cout«"Руйнування derived-об'єкта" « endl;}

void showB(char *s) {cout « s «"c=" « c «"; d=" « d «"; f=" «f« endl;}

};

Int mainO

{

derived ObjD(3,4,5);

ObjD.showB("Ba30BM клас:"); // Відображає числа c= 4; d= 3; f= 5 getchO; return 0;

}

Важливо розуміти, що аргументи для конструктора базового класу переда­ються через аргументи, які приймаються конструктором похідного класу. Навіть якщо конструктор похідного класу не використовує ніяких аргументів, то він по­винен оголосити один або декілька аргументів, якщо базовий клас приймає один або декілька аргументів. У цій ситуації аргументи, що передаються похідному класу, "транзитом" передаються базовому. Наприклад, у наведеному нижче коді програми конструктори baseAO і baseB(), на відміну від конструктора класу derived, приймають аргументи.

Код програми 5.14. Демонстрація механізму передачі аргументів конструкто­рам базового класу через конструктори похідного класу

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен class baseA { // Оголошення базового класу

protected: int с; public:

baseA(int х) {с = х; cout«"Створення baseA-об'єкта" « endl;}

-baseAO {cout «"Руйнування baseA-об'єкта" « endl;}

};

class baseB { // Оголошення базового класу protected: intf; public:

baseB(int x) {f = x; cout«"Створення baseB-об'єкта" « endl;}

-baseBO {cout «"Руйнування baseB-об'єкта" « endl;}

};

// Оголошення похідного класу

class derived: public baseA, public baseB {

public:

/* Конструктор класу derived не використовує параметрів, але повинен оголосити їх, щоб передати конструкторам базових класів. */

derived(int х, int у): baseA(x), baseB(y)

{cout «"Створення derived-об'єкта" « endl;}

-derivedO {cout«"Руйнування derived-об'єкта" « endl;} void showB(char *s)

{cout « s «"c ="« c «"; f=" «f« endl;}

};