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


 

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

6881. Побудова 3D-моделі рельєфа 1.21 MB
  Побудова 3D-моделі рельєфа. Одночасно відкриті в ENVI знімок та карта Використаємо створені на попередній лабораторній роботі файли карти для побудови тривимірної моделі поверхні. Для цього нам потрібна карта висот відповідної області...
6882. Магнітна індукція у феромагнетиках 215 KB
  Магнітна індукція у феромагнетиках Мета роботи: вивчення процесів, що відбуваються при намагнічуванні та перемагнічуванні тороидального феромагнітного сердечника. Зміст роботи і завдання 1. Ознайомитися з лабораторним макетом для зняття петель перем...
6883. Робота із мультиспектральними знімками. Класифікація 2.5 MB
  Робота із мультиспектральними знімками. Класифікація Більшість супутників, що проводять фотозйомку земної поверхні постачають дані не у вигляді кольорового зображення, а у вигляді декількох (інколи декількох десятків) монохромних зображень - по...
6884. Справочно-библиографический аппарат библиотеки 41.41 KB
  Справочно-библиографический аппарат библиотеки. Определение, состав и задачи справочно-библиографического аппарата (СБА) Согласно ГОСТ 7.26-80 Библиотечное дело. Основные термины и определения справочно-библиографический аппарат (СБА) библи...
6885. В чём заключается палеонтологический метод в геологии 26 KB
  В чём заключается палеонтологический метод в геологии? Объясните на примерах. Палеонтологический метод, метод определения относительного возраста осадочных толщ земной коры по сохранившимся в них ископаемым остаткам организмов. Используется для реше...
6886. Охарактеризуйте оболочки (геосферы) Земли. Приведите схему строения Земли 318 KB
  Охарактеризуйте оболочки (геосферы) Земли. Приведите схему строения Земли. Выделяются следующие геосферы: атмосфера, гидросфера, литосфера, земная кора, мантия и ядро Земли...
6887. Охарактеризуйте продукты вулканических извержений 33.5 KB
  Охарактеризуйте продукты вулканических извержений. При извержении вулкана выделяются продукты вулканической деятельности, которые могут быть жидкими, газообразными и твердыми. Газообразные - фумаролы и софиони, играют важную роль в вулканической дея...
6888. Охарактеризуйте землетрясения и их типы 31.5 KB
  Охарактеризуйте землетрясения и их типы. Ежегодно на всей Земле происходит около миллиона землетрясений, но большинство из них так незначительны, что они остаются незамеченными...
6889. Карст. Что такое карст и как он образуется 114 KB
  Что такое карст и как он образуется? Растворение некоторых горных пород вызывает целый ряд явлений, которые называются карстовыми. Слово карст обозначает такие формы рельефа, которые были образованы вследствие растворения горных пород, таких, напр...