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). Отже, у кожному конкретному випадку існує оптимальний варіант. Перевантажений конструктор забезпечує необхідну гнучкість класу, особливо необхідну при створенні бібліотек.


 

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

64486. Поліпшення енергетичних показників і паливної економічності бензинового двигуна в режимах повних навантажень 2.1 MB
  Актуальність теми полягає у тому що теоретичними та експериментальними дослідженнями показано як добавкою закису азоту до повітряного заряду можна одночасно покращити енергетичні показники і паливну економічність та створити сприятливі умови для роботи каталітичних нейтралізаторів.
64487. ЛЮБОМИР ВИНАР ЯК ДОСЛІДНИК УКРАЇНСЬКОЇ ІСТОРІЇ ТА ІСТОРІОГРАФІЇ 179.5 KB
  Винара що зумовлює актуальність даної теми адже науковий доробок вченого є важливим надбанням української історичної думки. Винара в дослідження проблем історії України та української історіографії.
64488. ВПЛИВ АТМОСФЕРНОГО ЗАБРУДНЕННЯ ГІРНИЧО-МЕТАЛУРГІЙНОГО КОМПЛЕКСУ НА ФОРМУВАННЯ ПСИХОФІЗІОЛОГІЧНОГО СТАТУСУ ДІТЕЙ 3-7-РІЧНОГО ВІКУ 248 KB
  У практиці епідеміологічних досліджень проведених серед дітей дошкільного і молодшого шкільного віку таким факторам як стать і вік приділяється недостатньо уваги; надаються неоднозначні дані щодо особливостей статевої вікової...
64489. ДЕРЖАВНЕ СТИМУЛЮВАННЯ ІННОВАЦІЙНОГО РОЗВИТКУ ХІМІЧНОЇ ГАЛУЗІ 227.5 KB
  Світова фінансова криза та її наслідки для економіки України з урахуванням існуючих структурних диспропорцій актуалізували потребу в детальному аналізі інноваційної складової стратегії соціально-економічного розвитку країни.
64490. Закономірності процесів оптимального повітряного охолодження плавильних реакторів скляного виробництва 1.22 MB
  Найбільш розповсюдженим способом охолодження стін варильного басейну є обдув повітрям. За рахунок охолодження реактор може проробити тривалий час навіть при невеликій залишковій товщині стінового огородження...
64491. ОЦІНКА НЕОДНОРІДНОСТІ УЩІЛЬНЕНИХ ҐРУНТІВ ШТУЧНИХ ОСНОВ 640 KB
  За цих умов геотехніка рекомендує влаштування штучних масивів з кращими будівельними властивостями ніж у природних ґрунтів. Певною проблемою при нормуванні властивостей ущільненого масиву також є невідповідність оптимальних параметрів ущільнення...
64492. БЕТОНИ НА ОСНОВІ КОМПОЗИЦІЙНИХ ЦЕМЕНТІВ, АКТИВОВАНИХ У ВИСОКОВОЛЬТНОМУ ЕЛЕКТРИЧНОМУ ПОЛІ 292.5 KB
  Важливим напрямком у вирішенні цих проблем є розробка композиційних цементів в тому числі багатокомпонентних що містять різні мінеральні добавки природного та техногенного походження.
64493. Одержання цирконійвмісних сполук з циркону Малишевського родовища 139 KB
  Україна є власником єдиного в Європі родовища високоякісної цирконієвмісної сировини – циркону силікат цирконію. Промислові потужності базового підприємства з видобутку та переробки циркону Малишевського родовища Вільногірського гірничо-металургійного...
64494. ТРИВОЖНІСТЬ ЯК ЧИННИК ДЕЗАДАПТАЦІЇ ПРАКТИЧНИХ ПСИХОЛОГІВ-ПОЧАТКІВЦІВ 472 KB
  Важливим у цьому контексті є врегулювання тривожності яка може негативно впливати на успішність оволодіння професією на результативність і якість професійної діяльності зокрема психологапрактика що як представник допомагаючих професій мусить бути для клієнта еталоном психологічного здоров’я.