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


 

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

66023. Управление финансами 106.38 KB
  Управление финансами это деятельность по обеспечению развития финансовой системы государства или конкретного субъекта хозяйствования в соответствии с заданными количественными и качественными параметрами. Управление финансами является составной частью общей системы управления социально-экономическими процессами.
66024. Федеральное казначейство и его функции 18.77 KB
  В России переход к казначейскому исполнению бюджета начался в 1992 г. исполнение бюджета в нашей стране было банковским. Чем отличаются эти две формы исполнения бюджета При банковском исполнении бюджета средства налогоплательщиков поступали на счета налоговых органов в Банке России или в коммерческих банках.
66025. Пенсионная реформа РФ 24.71 KB
  О дополнительных страховых взносах на накопительную часть трудовой пенсии и государственной поддержке формирования пенсионных накоплений начало приема заявлений о вступлении в отношения по ДСВ. 2009 С 1 января 2009 года действует новая система добровольных...
66026. Бюджетная реформа РФ 31 KB
  Как следует из программы повышения эффективности бюджетных расходов опубликованной сегодня Минфином министерства и ведомства будут получать государственные деньги только под конкретные долгосрочные целевые программы.
66028. Проблемы медицинского и социального обеспечения РФ. Минимальная медицинская помощь 24.76 KB
  Основные проблемы обеспечения доступности и качества медицинской помощи гражданам Российской Федерации и способы их решения Одним из основных направлений дальнейшего развития здравоохранения является разработка мер направленных на повышение качества и обеспечение доступности медицинской помощи гражданам Российской Федерации.