68954

Передача параметрів конструктору базового класу

Лекция

Информатика, кибернетика и программирование

Якщо конструктор похідного класу повинен отримувати декілька параметрів слід просто використовувати стандартну синтаксичну форму конструктора з параметрами. Проте виникає питання яким чином передаються аргументи конструктору базового класу

Украинкский

2014-09-28

47.5 KB

1 чел.

Лекція № 16

Тема: Передача параметрів конструктору базового класу

До цих пір ми розглядали конструктори, що не мають аргументів. Якщо конструктор похідного класу повинен отримувати декілька параметрів, слід просто використовувати стандартну синтаксичну форму конструктора з параметрами. Проте виникає питання, яким чином передаються аргументи конструктору базового класу? Для цього застосовується розширена форма оголошення конструктора похідного класу, яка дозволяє передавати аргументи декільком конструкторам одного або декількох базових класів. Загальна форма цієї синтаксичної конструкції така:

Конструктор похідного класу (список_аргументів) : basel (список__аргументов),

base2 (список__аргументов) baseN(список аргументів)

{

// Тіло конструктора похідного класу

}

Тут параметри basel - baseN є іменами базових класів. Зверніте увагу на те, що оголошення конструктора похідного класу відділяється двокрапкою від специфікацій базових класів, які, у свою чергу, розділяються комами. Розглянемо наступну програму.

#include <iostream> using namespace std; class base { protected:

int i; public:

base(int x) { i=x; cout << "Створення об\'єкту класу base\n"; }

-base() { cout << "Знищення об\'єкту класу base\n"; } }; class derived: public base {

int j ; public:

// Клас derived використовує змінну x; // змінна у передається базовому класу.

derived(int x, int у): base(у)

{

j=x;

cout << "Створення об\'єкту класу derived\n";

}

-derived() {

cout << "Знищення об\'єкту класу derived\n»;

}

void show() { cout << і << " " << j « endl; } };

int main() {

derived ob (3, 4);

ob.show(); // Виводить на екран числа 4 З

return 0; }


Тут конструктор класу derived має два параметри: х і у. Проте в самому конструкторі використовується лише змінна х, а змінна у передається конструктору базового класу. Як правило, в конструкторі похідного класу повинні оголошуватися всі параметри, необхідні базовому класу. Для цього вони указуються після двокрапки в списку аргументів конструктора базового класу.

Розглянемо приклад множинного наслідування.

#include <iostream>

using namespace std;

class basel {

protected:

int i;

public:

basel(int x) { i=x; cout << "Створення об\'єкту класу basel\n"; } -basel() { cout << "Знищення об\'єкту класу basel\n"; }

};

class base2 { protected:

int k; public:

base2(int x) { k=x; cout << "Створення об\'єкту класу base2\n"; }

~base2() { cout << "Знищення об\'єкту класу base2\n"; } }; class derived: public basel, public base2 {

int j ; public:

derived(int x, int y, int z): basel(y), base2(z)

{

j=x; cout << "Створення об\'єкту класу derived\n";

}

-derived() ( cout << "Знищення об\'єкту класу derived\n"; } void show() ( cout « і << " " << j « " " << k << endl; } };

int main() {

derived ob(3, 4, 5);

ob.show(); // Виводить на екран числа 4 3 5

return 0; }

Підкреслимо, що аргументи конструктора базового класу передаються за допомогою аргументів конструктора похідного класу. Отже, навіть якщо конструктор похідного класу не має власних аргументів, його оголошення повинне містити аргументи конструкторів базових класів. В цьому випадку аргументи, передавані конструктору похідного класу, просто переправляються конструкторам базових класів. Наприклад, в розглянутій нижче програмі конструктор класу derived не має власних аргументів, а конструктори класу basel і base2, навпаки, мають по одному параметру.

#include <iostream> using namespace std; class basel { protected:

int i; public:

basel(int x) { i=x; cout << "Створення об\'єкту класу basel\n"; }


-basel() { cout << "Знищення об\'єкту класу basel\n"; } };

class base2 { protected:

int k; public:

base2(int x) { k=x; cout << "Створення об\'єкту класу base2\n"; }

~base2() { cout << "Знищення об\'єкту класу base2\n"; } };

class derived: public basel, public base2 { public:

/* Конструктор класу derived не має параметрів,

в його оголошенні указуються параметри конструкторів

базових класів. */

derived(int х, int у): basel (x), base2(у)

{

cout << "Створення об\'єкту класу derived\n";

}

-derived() { cout << "Знищення об\'єкту класу derived\n"; }

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

int main() {

derived ob(3, 4);

ob.show(); // Виводить на екран числа 3 4

return 0; }

Конструктор похідного класу може довільно використовувати всі параметри, вказані в його оголошенні, навіть якщо вони передаються конструкторам базового класу. Інакше кажучи, передача параметрів конструкторам базових класів не виключає їх використання усередині похідного класу. Таким чином, фрагмент програми, приведений нижче, є абсолютно правильним.

class derived: public base { int j ; public:

// Клас derived використовує обидва параметри х і у,

// а потім передає їх конструктору базового класу.

derived(int x, int у): base(x, у)

{ j = x*y; cout << "Створення об\'єкту класу derived\n"; }

Передаючи параметри конструкторам базових класів, слід мати на увазі, що як аргумент можуть використовуватися будь-які допустимі вирази, наприклад, виклики функцій або змінні. Це повністю узгоджується з принципом динамічної ініціалізації об'єктів, передбаченою в мові C++.


 

А также другие работы, которые могут Вас заинтересовать

79770. Стратегический менеджмент: сущность и основные составляющие 89 KB
  Понятие стратегического управления. Стратегические проблемы развития производства и трудности стратегического управления. Составляющие стратегического управления и связь между ними. Понятие стратегического управления Слово стратегия греческого происхождения и означает искусство развертывания войск в бою...
79771. Организация как объект стратегического управления 71 KB
  Стратегический ресурсный потенциал организации. Производственный профиль миссия организации Системой называют совокупность взаимосвязанных элементов предназначенную для достижения определенной цели. Стратегический ресурсный потенциал организации Основополагающим принципом выделения элементов ПС для стратегического управления ею является оценка возможностей достижения стратегических целей ПС появляющихся при использовании данного элемента системы. СУ ПС связано с постановкой целей организации и с поддержанием определенных взаимоотношений...
79772. Формирование стратегических целей и стратегии предприятия 50.5 KB
  Если миссия задает общие ориентиры, направления функционирования организации, выражающие смысл ее существования, то конкретные конечные состояния, к которым стремится организация, фиксируются в виде ее целей, т.е. говоря иначе
79773. Разработка эффективной системы управления проектами в организации 624 KB
  Управление Проектами - одна из самых быстроразвивающихся управленческих дисциплин нашего времени. В условиях современной экономики, когда конкуренция во всех областях возросла, кажется, до предела, а сроки жизни отдельных товаров исчисляются месяцами и даже неделями, применение технологий управления проектами является необходимым не только для процветания, но и для выживания почти каждого коммерческого предприятия.
79774. Разработка устройства, позволяющего контролировать и управлять бытовым оборудованием через сеть GSM 388 KB
  При этом помимо необходимости охраны существует ещё необходимость отслеживать состояние бытового оборудования, прежде всего системы отопления, поскольку на значительной части территории России оставлять жилой доме без работающего отопления нельзя. При этом на рынке нет систем, предназначенных только для контроля работы системы отопления. Некоторые охранные сигнализации позволяют это делать, однако они их цена значительно выше, чем у специализированного устройства. Поэтому разработка устройства для удалённого контроля бытового оборудования целесообразна.
79775. Исследование взаимосвязи гендерных ролей и физического пола 214.5 KB
  Если век назад ребенок мог даже по внешнему виду определиться к какому полу принадлежит другой человек взрослый подросток длинные волосы прическа юбка брюки туфли ботинки косметика материал одежды то теперь его окружают мужчины с длинными волосами маникюром женщины коротко стриженные с бритым затылком в брюках рубашке не говоря уже о сигарете это картины нашего мира сейчас. Упомяну и последнии коллекции Готье Ив Сен Лорана Версачче и еще ряда модельеров одевших мужчин в юбки. Гипотезой исследования было: современные...
79776. Моделирование на уроках информатики в начальных классах как способ развития логического мышления 250.5 KB
  Современное образование требует преодоления разрозненности учебных предметов. Каждой научной дисциплине свойственно свое особое сочетание формализованных и неформализованных методов моделирования явлений, процедур доказательства и объяснения....
79777. Исследование принципов и методов рабочих процедур видеопроизводства на основе систем управления контентом 9.25 MB
  В данной дипломной работе проведено исследование принципов и методов рабочих процедур видеопроизводства на основе систем управления контентом. Разработана система процедур рабочего процесса по работе с медиаданными, создана возможность автоматизации рабочих процедур при работе в видеомонтажных программах в видеостудии кафедры ИКТ. Разработан фирменный стиль экспериментального Интернет-телеканал МИЭМ-ТВ.