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


 

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

6571. Генетические основы онтогенеза 27.97 KB
  Генетические основы онтогенеза Онтогенез - непрерывный процесс количественных и качественных изменений, происходящих в организме в течение всей жизни при постоянном взаимодействии генотипа и условий среды. Термины онтогенез и филогенез ввел...
6572. Генетика популяций. Понятие о популяции и чистых линиях. Эффективность отбора в чистых линиях и популяциях 47.82 KB
  Генетика популяций Понятие о популяции и чистых линиях. Эффективность отбора в чистых линиях и популяциях. Популяция - это группа организмов одного вида, свободно скрещивающихся друг с другом, имеющая определённый ареал обитания и изолированная...
6573. Иммлуногенетика. Группы крови человека и животных 34.01 KB
  Иммлуногенетика Группы крови человека и животных. В пределах вида особи различаются не только по морфологическим признакам, но и по ряду биохимических, которые могут быть выявлены иммуногенетически в виде системы антигенов. Антигены - это вещества б...
6574. Наследование количественных признаков 46.79 KB
  Наследование количественных признаков Все признаки у животных разделяются на две группы - качественные и количественные. К качественным признакам относятся: масть животных, пол, тип конституции, устойчивость к заболеваниям и другие....
6575. Генетические основы иммунитета. Понятие об иммунитете и иммунной системе организма 35.33 KB
  Генетические основы иммунитета Понятие об иммунитете и иммунной системе организма. Мы живем в потенциально враждебном мире, наполненном огромным множеством инфекционных агентов, которые имеют различные размеры форму, строение и раз...
6576. Наследственные аномалии и болезни с наследственной предрасположенностью. Селекция животных на устойчивость к заболеваниям 33.59 KB
  Наследственные аномалии и болезни с наследственной предрасположенностью. Селекция животных на устойчивость к заболеваниям Генетические аномалии у сельскохозяйственных животных. В результате мутаций у животных и человека возникают различные наследств...
6577. Генетика крупного рогатого скота, свиней, овец и птицы 42.86 KB
  Генетика крупного рогатого скота, свиней, овец и птицы Генетика крупного рогатого скота. Скотоводство представляет в нашей стране главную отрасль животноводства. Дальнейшее его развитие связано с увеличением генетического потенциала, возможности кот...
6578. Дидактические материалы к конструированию и анализу урока 191.5 KB
  Дидактические материалы к конструированию и анализу урока Требования к современному уроку 1. Точное и творческое выполнение программно-методических требований к уроку грамотное определение типа урока, его места в разделе, курсе, системе внутрикурсо...
6579. Философия, ее смысл и функции 30.78 KB
  Философия, ее смысл и функции. Истоки философии и её смысл. Философское мировоззрение. Методы философии Структура и функции философии. Термин философия означает буквально любовь к мудрости. Его впервые употребил Пифагор по отнош...