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


 

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

46880. Политико-правовые проблемы отношений центра и регионов в современной России 34.5 KB
  Этапы развития федер. Реальные процессы федерализации начались во 2ой пол. 1 этап развития федер.целостность было принято решение подписать федерый договор.
46881. Леонтьев А.Н. «К теории развития психики ребенка» 34.5 KB
  К теории развития психики ребенка.В ходе развития ребенка изменяется место которое он занимает в системе человеческих отношений.Все другие люди отношения к которым опосредованы для ребенка отношениями устанавливающимися в первом круге. Перестраивается система отношений; появляется общественная функция роль ребенка.
46883. Методы диагност обследования больных туберкульозом лёгких 34.5 KB
  Диагностика (туберкулодиагностика) - метод изучения инфицированности микобактериями туберкулеза, а также реактивности инфицированных или вакцинированных людей, основанный на применении туберкулиновых проб.
46884. ТУБЕРКУЛЁЗ ВНУТРИГРУДНЫХ ЛИМФАТИЧЕСКИХ УЗЛОВ 34.5 KB
  ТУБЕРКУЛЁЗ ВНУТРИГРУДНЫХ ЛИМФАТИЧЕСКИХ УЗЛОВ Туберкулёз внутригрудных лимфатических узлов обычно морфологически подразделяют на инфильтративную форму сходную с прикорневой пневмонией характеризующейся преимущественно перифокальными реакциями вокруг поражённых узлов и туморозную форму сходную с опухолевыми заболеваниями и характеризующуюся преимущественно гиперплазией лимфатических узлов и казеозом. При хорошо работающей педиатрической службе туберкулёз внутригрудных лимфатических узлов чаще выявляют при обследовании ребёнка или подростка...
46886. ИСКУССТВЕННЫЕ ТЕХНОЛОГИЧЕСКИЕ БАЗЫ 34.99 KB
  К категории искусственных технологических баз относятся также такие технологические базы которые в целях повышения точности базирования обрабатываемой заготовки в приспособлении предварительно обрабатываются с более высокой точностью чем это требуется для готового изделия по чертежу.Характерным примером искусственных технологических баз могут служить центровые отверстия не требующиеся для готового пала и необходимые исключительно из технологических соображений.
46887. Особенности философии Возрождения. Человек как центральная проблема философии эпохи Возрождения 35 KB
  Гуманизм представляет собой в эту эпоху образ мышления где идея блага человека объявляется главной целью социального и культурного развития. Обращение к человеку не просто анализ его земного бытия а показатель сущности человека в мире. Путь творческой деятельности и творчества Особое значение приобретает не только духовная красота человека но и его телесная красота. Индивидуализм как принципиальная установка при рассмотрении человека становится средством обоснования его самоценности необходимости освобождения от...
46888. Метод проектов 35 KB
  Для комплексного решения задач технологического обучения используются различные методы в том числе выполнение творческих проектов целью которых является включение учащихся в процесс преобразовательной деятельности от разработки идеи до ее осуществления. Выполняя проекты школьники осваивают методы инновационной творческой деятельности учатся самостоятельно находить и анализировать информацию получать и применять знания по различным отраслям приобретать умения и навыки практической работы опыт...