русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Перезавантажені конструктори


Дата додавання: 2014-04-22; переглядів: 896.


Було б зручно здійснювати ініціалізацію змінних типу Distance в момент їх створення. Щоб це зробити, викличемо конструктор так:

Distance(int ft,float in):feet(ft),inches(in)

{ }

Ми ініціалізуємо поля feet та inches тими значеннями, які передаються конструктору в якості аргументів.

Разом з тим, ми хочемо зберегти можливість визначати змінні типу Distance без ініціалізації, як ми це робили в програмі 9.3.

Distance dist1,dist2;

В програмі 9.3 не було конструктора, але визначення працювали без помилок. Чому так відбувалося? Це пояснюється тим, що компілятор автоматично вбудовує в програму конструктор без параметрів, який і створює змінні класу, хоча явного визначення конструктора ми не робили. Такий конструктор без параметрів називається конструктором за замовчуванням.

Часто нам хотілося б, щоб початкові значення полів об’єкта присвоювалися також і в конструкторі без параметрів. Якщо покласти цю функцію на конструктор за замовчуванням, то ми не зможемо дізнатися, якими значеннями були ініціалізовані поля. Якщо для нас істотно, якими значеннями будуть ініціалізуватися поля об’єктів класу, то слід явно визначити конструктор. В програмі 9.5 ми вчинили це так:

Distance():feet(0),inches(0.0) //конструктор без аргументів

{ }

Члени класу ініціалізуються константними значеннями, в даному випадку цілим значенням 0 для поля feet і дійсним значенням 0.0 для поля inches. Отже, ми можемо використовувати об’єкти, ініціалізовані за допомогою конструктора без параметрів, будучи певними в тому, що поля об’єктів мають нульове, а не довільне значення.

Тепер у нас є два явно визначені конструктори з тим самим іменем Distance(), і тому кажуть, що конструктор є перезавантаженим. Який з цих двох конструкторів виконається під час створення нового об’єкта, залежить від того, скільки аргументів використовується при виклику:

Distance dist; //конструктор без параметрів

Distance dist2(11,6.25); //конструктор з 2 параметрами

 


<== попередня лекція | наступна лекція ==>
Деструктори | Визначення методів класу поза класом та операція глобального дозволу


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн