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


 

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

77266. Кресцовое сплетение и его нервы 162.82 KB
  Pltxus sacralis - образовано передними ветвями 4-5 поясничного и 4 верхних крестцовых. Распологается на передней поверхности грушевидной мышцы. Ветви делятся на короткие, которые заканчиваются в области тазового пояса, и длинные, направляющиеся к свободной нижней конечности
77267. Сегмент спинного мозга 56.3 KB
  Заднекорешковые волокна Вставочные рассеянные клетки spongios et terminlis 12 выше и нижележащие geltinos 37 выше и ниже Задние латеральные передние собственные пучки ДЯПРСМ.
77268. Канатики спинного мозга. Восходящие и нисходящие проводники спинного мозга 105.58 KB
  Задний канатик афферентные пути: fsciculus grcilis Голля – центральные отростки псевдоуниполярных клеток 19 нижних спинномозговых узлов – сознательная проприоцептивная и частично тактильная чувствительность от нижних конечностей и нижней части туловища fsciculus cunetus Бурдаха 12 верхних от рецепторов мышц верхних конечностей шеи и верхней части туловища fsciculus proprius posterior – аксоны вставочных нейронов сегментарного аппарата zon rdiculris – горизонтальные нервные волокна – центральные отростки псевдоуниполярных клеток...
77269. Оболочки и межоболочечные пространства спинного мозга. Содержимое этих пространств. Фиксирующий аппарат спинного мозга 13.58 KB
  От латеральной части отходят ligment denticult во фронтальной плоскости в форме зубцов верхушки которых охватываются отростками паутинной оболочки и заканчиваются на внутренней поверхности твёрдой посередине между двумя СМН rchnoide mter spinlis – паутинная оболочка прозрачная плёнка переходит в паутинную оболочку головного мозга в области formen mgnum; на уровне SII сливается с мягкой оболочкой. Её отростки образуют влагалища для пронизывающих её корешков СМН и зубчатых связок. От боковой поверхности отходят отростки в виде рукавов для...
77270. Продолговатый мозг, его развитие, внешнее и внутреннее строение (ядра, проводники), артерии продолговатого мозга 385.3 KB
  Серое вещество: 4 группы ядер nuclei grcilis et cunetus; nuclei olive; nuclei formtion reticulris; ядра IXXII пар черепных нервов Черепные нервы продолговатого мозга: nn hypoglossus XII пара ccessories XI пара vgus X пара glossophryngeus IX пара.
77271. Мост, его развитие, внешнее и внутреннее строение (ядра и проводники). Артерии моста 147.51 KB
  Артерии моста. Внутреннее строение: На поперечном срезе можно выделить основание моста базилярную часть вентральную часть prs bsilris ventrlis; покрышку моста tegmentum pontis дорсальную часть prs dorslis и трапециевидное тело corpus trpezoideum Серое вещество: nuclei proprii pontis; nuclei formtion reticulris; nuclei nterior et posterior corporis trpezoideum; ядра VVIII пар черепных нервов. Черепные нервы моста – n. Белое вещество: В базальной части основании моста проходят: tr.
77272. Мозжечок, его развитие, внешнее и внутреннее строение. Связи мозжечка с др отделами центральной нервной системы. Артерии мозжечка 232.24 KB
  Части: Средняя vermis Боковые hemispheri Поверхности: Fcies superior cerebelli посередине продольное возвышение – vermis superior Fcies inferior cerebelli посередине продольное возвышение – vermis inferior продольное углубление долина мозжечка vllecul cerebelli. Дольки червя: lingul cerebelli lobulus centrlis monticulus culmen declive folium cerebelli tuber vermis pyrmis vermis uvul vermis nodulus. Дольки полушарий: lobulus qudrngulris lobulus semilunris superior et inferior lobulus grcilis lobulus biventer tonsill...
77273. Спинно-мозжечковые пути 14.9 KB
  spinocerebellris posterior Идет в составе нижних ножек мозжечка. Заканчиваются на нейронах коры нижней части червя мозжечка.spinocerebellris nterior Идет в составе верхних ножек мозжечка. Заканчиваются на нейронах коры верхней части червя мозжечка.