69708

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

Лекция

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

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

Украинкский

2014-10-09

27.5 KB

0 чел.

Тема 8: Перевантаження конструкторів

Конструктори можна перенавантажувати. Фактично їх-то і перенавантажують частіше за все. Для перевантаження конструктора існують три причини: гнучкість, можливість створення ініціалізованих (не ініціалізованих) об'єктів і конструкторів копіювання. Досить часто об'єкти класу можна створити декількома способами. Для кожного з цих способів можна визначити окремий варіант перевантаженого конструктора. Ці варіанти вичерпують всі можливості створити об'єкт — при спробі зробити це непередбаченим способом компілятор не знайде відповідного конструктора і видасть повідомлення про помилку.

Перевантажені конструктори набагато підвищують гнучкість класу. Вони дозволяють користувачу вибирати оптимальний спосіб створення об'єкту.Приклад програми, яка створює клас date для зберігання календарної дати. Туту конструктор перевантажений двічі.

#include <iostream>

#include <cstdio>

using namespace std;

class date

{

int day, month, year;

public:

date(char *d);

date(int m, int d, int у);

void show_date();

};

// Ініціалізація рядком.

date::date(char *d)

{

sscanf(d, "%d%*c%d%*c%d" &month &day &year);

}

date::date(int m, int d, int у)

{

day = d;

month = m;

year = у;

}

void date::show_date() {

cout << month << "/" << day;

cout << "/" << year << "\n";

}

int main()

{

date ob1(12, 4, 2001), ob2("10/22/2001");

ob1.show_date();

ob2.show_date() ;

return 0;

}

В цій програмі об'єкт класу date можна ініціалізувати двома способами. Задавши місяць, день і рік у вигляді трьох цілих чисел або у вигляді рядка mm/dd/yyyy. Обидва способи застосовуються досить часто тому має сенс передбачити два різні конструктори для створення об'єктів класу date.

Цей приклад ілюструє основну ідею, яка лежить в основі перевантажених конструкторів: вони дозволяють вибирати спосіб створення об'єктів, який краще всіх відповідає конкретній ситуації. Наприклад, користувач може ввести дату у вигляді массива s. Цей рядок можна відразу використовувати для створення об'єкту класу date. Для цього абсолютно не вимагається перетворювати її в інший вигляд. Проте, якби конструктор date() би не був перевантажений, рядок довелося б розбити на три цілі числа.

int main()

{

char s[80];

cout << "Введіть нову дату: ";

сіn >> s;

date d(s);

d.show_date();

return 0 ;

}

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


 

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

11851. Шифраторы (кодеры) и дешифраторы 55.5 KB
  Лабораторная работа №5 Шифраторы и дешифраторы Теоретическое введение Шифраторы кодеры используются чаще всего для преобразования десятичных чисел в двоичный или двоичнодесятичный код например в микрокалькуляторах в которых нажатие десятичной клавиши со
11852. Цифровой компаратор 81.5 KB
  Лабораторная работа №6 Цифровой компаратор Теоретическое введение Цифровые компараторы от английского compare сравнивать выполняют сравнение двух чисел А В одинаковой разрядности заданных в двоичном или двоичнодесятичном коде. В зависимости от схемного исп...
11853. Устройство контроля четности 67 KB
  Лабораторная работа №7 Устройство контроля четности Теоретическая часть Операции контроля четности двоичных чисел позволяет повысить надежность передачи и обработки информации. Ее сущность заключается в суммировании по модулю 2 всех разрядов с целью выяснени
11854. Модуляция и детектирование сигналов оптического диапазона 542.5 KB
  Тема: Модуляция и детектирование сигналов оптического диапазона Текст лекции № 20 по дисциплине: Теория электрической связи Модуляция и детектирование сигналов оптического диапазона Введение Волоконно-оптические линии связи ВОЛС имеют ряд преимущес...
11855. Характеристики модуляции сигналов оптического диапазона 683.5 KB
  Текст лекции № 21 по дисциплине: Теория электрической связи Характеристики модуляции сигналов оптического диапазона Введение Волоконнооптические линии связи ВОЛС имеют ряд преимуществ по сравнению с линиями связи на основе металлических кабелей. К ни
11856. Представление аналогового сигнала в цифровом виде 163.5 KB
  Текст лекции № 22 по дисциплине: Теория электрической связи Представление аналогового сигнала в цифровом виде Введение Цифровая обработка сигналов как направление развития науки и техники зародилась в 1950х годах. За прошедшие 50 лет благодаря успехам микро
11857. Робота з Кубом Caché 1.1 MB
  Лекція 2. Робота з Кубом Caché Для розробки застосувань та роботи з БД система Caché пропонує наступний набір утиліт: студію Caché Studio; термінал Caché Terminal; портал управління системою. Дані утиліти запускаються з Cachéкуба розташованого в панелі задач рис. 1. ...
11858. Думи мої, думи мої 58 KB
  Думи мої думи мої. Літературний вечір 1. Ведуча. Я вас вітаю з березневим днем. І всетаки зійдуть сніги і нам привітно усміхнуться дерева своїм листям трава і квіти. І прилетять гусилебеді. Такого ж березневого дня колись принесли лемки до кріпацької хати малень
11859. Хімія - світ кави 92 KB
  Тема: Хімія світ кави. Мета: поглибити знання з хімії. Форма проведення: хімічний вечір Оформлення сцени: фізична карта світу прапорцями відмічено країни де виробляють каву: Бразилія Колумбія Уганда КостаРіка Камерун Сальвадор Гватемала Мексика Перу Інд